Android軟體開發之在程式中時時擷取logcat日志資訊

各位大小盆友們晚上好,由于這周在公司連續加了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. "我是M9手機");
3. }
2.Logcat說明
Android開發中一共有5個log資訊過濾器 分别是 VERBOSE 、DEBUG、 INFO、 WARN、 ERROR,這些各位盆友們應該都知道吧,不知道給我留言哈~~
請各位盆友們觀察下面的代碼,内容為監聽一個按鈕點選事件一旦點選後輸出一段Logcat資訊,為了監聽系統列印的這個log資訊我們開啟一個線程在背景去監聽它。
1. @Override
2. public void
3. super.onCreate(savedInstanceState);
4. setContentView(R.layout.check);
5.
6. /**得到這個按鈕對象**/
7. button = (Button)findViewById(R.id.button0);
8.
9. /**監聽這個按鈕**/
10. button.setOnClickListener(new
11.
12. @Override
13. public void
14. /**輸出一段Log資訊**/
15. "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
3. Process mLogcatProc = null;
4. BufferedReader reader = null;
5. try
6. //擷取logcat日志資訊
7. new String[] { "logcat","Mytest:I *:S"
8. new BufferedReader(new
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. this, "監聽到log資訊", Toast.LENGTH_SHORT).show();
19. Looper.loop();
20. }
21. }
22.
23. } catch
24.
25. e.printStackTrace();
26. }
27.
28. }
最重要的一定要加讀取系統LOG的權限喔,否則是監聽不到的。
- <uses-permission android:name="android.permission.READ_LOGS" />
效果圖
最後還是老規矩每篇文章都會附帶源代碼,最後如果你還是覺得我寫的不夠詳細 看的不夠爽 不要緊我把源代碼的下載下傳位址貼出來 歡迎大家一起讨論學習雨松MOMO希望可以和大家一起進步。
下載下傳位址:http://down.51cto.com/data/259343