Android軟件開發之在程序中時時獲取logcat日誌信息


雨鬆MOMO原創文章如轉載,請註明:轉載至我的獨立域名博客雨鬆MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/193












        各位大小盆友們晚上好,由於這周在公司連續加了5天通宵班,項目實在太緊了。還好MOMO沒有掛到公司順利的回到了溫暖的家嘎嘎。不過MOMO還是不忘大夥們 哇咔咔~~ 一回來就更新博客,分享一個在軟件開發中很實用的例子,也是這幾天在通宵加班中我使用的一個小例子, 在程序中監聽Log信息。

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




1.獲取手機型號信息

//獲取機型名稱
android.os.Build.MODEL
//獲取SDK信息
android.os.Build.VERSION.SDK
//獲取版本號
android.os.Build.VERSION.RELEASE

那麼代碼中就可以這樣寫


  1. if (android.os.Build.MODEL.equals("meizu_m9")){  
  2.     System.out.println("我是M9手機");  
  3. }  


2.Logcat說明

Android開發中一共有5個log信息過濾器 分別是 VERBOSE 、DEBUG、 INFO、 WARN、 ERROR,這些各位盆友們應該都知道吧,不知道給我留言哈~~
請各位盆友們觀察下面的代碼,內容爲監聽一個按鈕點擊事件一旦點擊後輸出一段Logcat信息,爲了監聽系統打印的這個log信息我們開啓一個線程在後臺去監聽它。



  1.    @Override  
  2.    public void onCreate(Bundle savedInstanceState) {  
  3. super.onCreate(savedInstanceState);  
  4. setContentView(R.layout.check);  
  5.   
  6. /**得到這個按鈕對象**/  
  7. button = (Button)findViewById(R.id.button0);  
  8.   
  9. /**監聽這個按鈕**/  
  10. button.setOnClickListener(new OnClickListener() {  
  11.       
  12.     @Override  
  13.     public void onClick(View view) {  
  14.     /**輸出一段Log信息**/  
  15.     Log.i("Mytest""this is a test");  
  16.       
  17.     /**開啓線程用於監聽log輸出的信息**/  
  18.     new Thread(CheckActivity.this).start();  
  19.     }  
  20. });  
  21.   
  22.   
  23.    }  


線程開啓以後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信息包含我們上面點擊按鈕的。
這樣子就可以監聽各種LOG 無論是我們自己寫的還是系統寫的都可以監聽到 哇咔咔~~

最後用Toast將內容顯示出來,因爲在線程中所以必需使用Lopper不太瞭解的盆友請看Android遊戲開發之多線程的操作方式(二十六)






  1.    @Override  
  2.    public void run() {  
  3. Process mLogcatProc = null;  
  4. BufferedReader reader = null;  
  5. try {  
  6.         //獲取logcat日誌信息   
  7.     mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat","Mytest:I *:S" });  
  8.     reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));  
  9.   
  10.     String line;  
  11.       
  12.     while ((line = reader.readLine()) != null) {  
  13.           
  14.         if (line.indexOf("this is a test") > 0) {  
  15.             //logcat打印信息在這裏可以監聽到   
  16.             // 使用looper 把給界面一個顯示   
  17.             Looper.prepare();    
  18.             Toast.makeText(this"監聽到log信息", Toast.LENGTH_SHORT).show();   
  19.             Looper.loop();    
  20.         }  
  21.     }  
  22.   
  23. catch (Exception e) {  
  24.   
  25.     e.printStackTrace();  
  26. }  
  27.   
  28.    }  



最重要的一定要加讀取系統LOG的權限喔,否則是監聽不到的。

  1. <uses-permission android:name="android.permission.READ_LOGS" />  


效果圖

    






最後還是老規矩每篇文章都會附帶源代碼,最後如果你還是覺得我寫的不夠詳細 看的不夠爽 不要緊我把源代碼的下載地址貼出來 歡迎大家一起討論學習雨鬆MOMO希望可以和大家一起進步。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章