Android開發(fā)之在程序中時時獲取logcat日志信息的方法(附demo源碼下載)
本文實例講述了Android開發(fā)之在程序中時時獲取logcat日志信息的方法。分享給大家供大家參考,具體如下:
今天分享一個在軟件開發(fā)中很實用的例子,也是這幾天在通宵加班中我使用的一個小例子, 在程序中監(jiān)聽Log信息。
為什么說它實用?原因是Android的開發(fā)廠商各種修改之后手機和手機之間以后存在很多差異。比如說魅族M9手機 開發(fā)中如果項目中涉及到訪問手機系統(tǒng)的地方,例如訪問系統(tǒng)短信庫,M9手機它會提示一個dialog框 讓用戶自己去選擇 訪問還是不訪問。這樣就給開發(fā)適配帶來了巨大的麻煩。本來在這里直接能拿到數(shù)據(jù)可是現(xiàn)在我須要對用戶的選擇進行監(jiān)聽? 以后的小米手機肯定也會有這個問題~ 悲劇啊~~最后在這里這里我選擇使用監(jiān)聽LOG信息來監(jiān)聽用戶點擊按鈕授權與不受權。
1.獲取手機型號信息
//獲取機型名稱 android.os.Build.MODEL //獲取SDK信息 android.os.Build.VERSION.SDK //獲取版本號 android.os.Build.VERSION.RELEASE
那么代碼中就可以這樣寫
if (android.os.Build.MODEL.equals("meizu_m9")){
System.out.println("我是M9手機");
}
2.Logcat說明
Android開發(fā)中一共有5個log信息過濾器 分別是 VERBOSE 、DEBUG、 INFO、 WARN、 ERROR
請各位盆友們觀察下面的代碼,內(nèi)容為監(jiān)聽一個按鈕點擊事件一旦點擊后輸出一段Logcat信息,為了監(jiān)聽系統(tǒng)打印的這個log信息我們開啟一個線程在后臺去監(jiān)聽它。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.check);
/**得到這個按鈕對象**/
button = (Button)findViewById(R.id.button0);
/**監(jiān)聽這個按鈕**/
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
/**輸出一段Log信息**/
Log.i("Mytest", "this is a test");
/**開啟線程用于監(jiān)聽log輸出的信息**/
new Thread(CheckActivity.this).start();
}
});
}
線程開啟以后Runtime主要用于過濾logcat信息,這里主要說一下里面的參數(shù)
"logcat"不用說了吧,我們就是要監(jiān)聽它 呵呵。
"Mytest" 表示監(jiān)聽的Tag 這里以上面點擊按鈕輸出的LOG信息為例。
"I"表示監(jiān)聽的Log類型,當然這里還可以寫其它類型 。VERBOSE(v) 、DEBUG(d)、 INFO(i)、 WARN(w)、 ERROR(e), 不過須要與監(jiān)聽的與Tag一一對稱才可以。
"*:s"表示監(jiān)聽所有的信息,這里表示只要tag是Mytest ,Logcat類型為i 的 所有Log都會被獲取到。
然后將所有過濾出來的log信息存在 BufferReader中 調(diào)用readLine()可以獲取到每一行的log信息。
line.indexOf("this is a test") 如果大于等于0 表示當前獲取的log信息包含我們上面點擊按鈕的。
這樣子就可以監(jiān)聽各種LOG 無論是我們自己寫的還是系統(tǒng)寫的都可以監(jiān)聽到 哇咔咔~~
最后用Toast將內(nèi)容顯示出來
@Override
public void run() {
Process mLogcatProc = null;
BufferedReader reader = null;
try {
//獲取logcat日志信息
mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat","Mytest:I *:S" });
reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (line.indexOf("this is a test") > 0) {
//logcat打印信息在這里可以監(jiān)聽到
// 使用looper 把給界面一個顯示
Looper.prepare();
Toast.makeText(this, "監(jiān)聽到log信息", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
最重要的一定要加讀取系統(tǒng)LOG的權限喔,否則是監(jiān)聽不到的。
<uses-permission android:name="android.permission.READ_LOGS" />
效果圖:

完整實例代碼點擊此處本站下載。
更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
相關文章
android圖像繪制(六)獲取本地圖片或拍照圖片等圖片資源
從SD卡中獲取圖片資源,或者拍一張新的圖片,然后再進行處理(直接處理返回圖片/獲得圖片的地址再處理)接下來為您詳細介紹,感興趣的朋友可以了解下2013-01-01
Android中利用xml文件布局修改Helloworld程序
這篇文章主要介紹了Android中利用xml文件布局修改Helloworld程序 的相關資料,需要的朋友可以參考下2016-07-07

