歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 程序時時獲取logcat信息

Android 程序時時獲取logcat信息

日期:2017/3/1 10:19:30   编辑:Linux編程

比如說魅族M9手機 開發中如果項目中涉及到訪問手機系統的地方,例如訪問系統短信庫,M9手機它會提示一個dialog框 讓用戶自己去選擇 訪問還是不訪問。這樣就給開發適配帶來了巨大的麻煩。本來在這裡直接能拿到數據可是現在我須要對用戶的選擇進行監聽? 以後的小米手機肯定也會有這個問題~ 悲劇啊~~最後在這裡這裡我選擇使用監聽LOG信息來監聽用戶點擊按鈕授權與不受權。

Logcat說明

Android開發中一共有5個log信息過濾器 分別是 VERBOSE 、DEBUG、 INFO、 WARN、 ERROR,這些各位盆友們應該都知道吧,不知道給我留言哈~~

請各位盆友們觀察下面的代碼,內容為監聽一個按鈕點擊事件一旦點擊後輸出一段Logcat信息,為了監聽系統打印的這個log信息我們開啟一個線程在後台去監聽它。

線程開啟以後Runtime主要用於過濾logcat信息,這裡主要說一下裡面的參數

"logcat"不用說了吧,我們就是要監聽它 呵呵。

"Mytest" 表示監聽的Tag 這裡以上面點擊按鈕輸出的LOG信息為例。

"I"表示監聽的Log類型,當然這裡還可以寫其它類型 。VERBOSE(v) 、DEBUG(d)、 INFO(i)、 WARN(w)、 ERROR(e), 不過須要與監聽的與Tag一一對稱才可以。

"*:s"表示監聽所有的信息,這裡表示只要tag是Mytest ,Logcat類型為i 的 所有Log都會被獲取到。

然後將所有過濾出來的log信息存在 BufferReader中 調用readLine()可以獲取到每一行的log信息。

line.indexOf("this is a test") 如果大於等於0 表示當前獲取的log信息包含我們上面點擊按鈕的。

  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. setContentView(R.layout.main);
  4. Button btn = (Button)findViewById(R.id.btn_b);
  5. btn.setOnClickListener(new View.OnClickListener() {
  6. @Override
  7. public void onClick(View v) {
  8. // Intent intent = new Intent("android.intent.action.APP_A_SECOND_ACTIVITY");
  9. // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  10. // startActivity(intent);
  11. // Toast.makeText(FirstActivity.this, getAndroidSDKVersion()+"", 1).show();
  12. Log.i("Mytest", "this is a 11test");
  13. /**開啟線程用於監聽log輸出的信息**/
  14. new Thread(new Runnable() {
  15. @Override
  16. public void run() {
  17. Process mLogcatProc = null;
  18. BufferedReader reader = null;
  19. try {
  20. //獲取logcat日志信息
  21. mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat","Mytest:I *:S" });
  22. reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));
  23. String line;
  24. while ((line = reader.readLine()) != null) {
  25. if (line.indexOf("this is a test") > 0) {
  26. //logcat打印信息在這裡可以監聽到
  27. // 使用looper 把給界面一個顯示
  28. Looper.prepare();
  29. Toast.makeText(FirstActivity.this, "監聽到log信息", Toast.LENGTH_SHORT).show();
  30. Looper.loop();
  31. }
  32. }
  33. } catch (Exception e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }).start();
  38. }
  39. });
  40. }

注:

默認情況下,線程是沒有消息循環的,所以要調用 Looper.prepare()來給線程創建消息循環,然後再通過,Looper.loop()來使消息循環起作用。

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved