歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android 程序時時獲取logcat信息

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

注:

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

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

Copyright © Linux教程網 All Rights Reserved