當前位置

首頁 > 語文基礎 > 日誌 > Android開發在程序中獲取logcat日誌信息的方法

Android開發在程序中獲取logcat日誌信息的方法

推薦人: 來源: 閱讀: 2.01W 次

今天分享一個在軟件開發中很實用的例子,也是這幾天在通宵加班中我使用的一個小例子, 在程序中監聽Log信息。

Android開發在程序中獲取logcat日誌信息的方法

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

1.獲取手機型號信息

//獲取機型名稱L//獲取SDK信息/獲取版本號ASE

那麼代碼中就可以這樣寫

if (ls("meizu_m9")){ tln("我是M9手機");}

at說明

Android開發中一共有5個log信息過濾器 分別是 VERBOSE 、DEBUG、 INFO、 WARN、 ERROR

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

@Overridepublic void onCreate(Bundle savedInstanceState) {eate(savedInstanceState);setContentView(k);/**得到這個按鈕對象**/button = (Button)findViewById(on0);/**監聽這個按鈕**/nClickListener(new OnClickListener() { @Override public void onClick(View view) { /**輸出一段Log信息**/ Log.i("Mytest", "this is a test"); /**開啓線程用於監聽log輸出的信息**/ new Thread()t(); }});}

線程開啓以後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()可以獲取到每一行的信息。

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

這樣子就可以監聽各種LOG 無論是我們自己寫的還是系統寫的都可以監聽到 哇咔咔~~

最後用Toast將內容顯示出來

@Overridepublic void run() {Process mLogcatProc = null;BufferedReader reader = null;try { //獲取logcat日誌信息 mLogcatProc = untime()(new String[] { "logcat","Mytest:I *:S" }); reader = new BufferedReader(new InputStreamReader(nputStream())); String line; while ((line = Line()) != null) { if (xOf("this is a test") > 0) { //logcat打印信息在這裏可以監聽到 // 使用looper 把給界面一個顯示 are(); Text(this, "監聽到log信息", TH_SHORT)(); (); } }} catch (Exception e) { tStackTrace();}}

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

效果圖: