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

完整實(shí)例代碼點(diǎn)擊此處本站下載。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- 在Android界面上顯示和獲取Logcat日志輸出的方法
- Android adb logcat 命令查看日志詳細(xì)介紹
- Android shell命令行中過(guò)濾adb logcat輸出的幾種方法
- Android Studio使用小技巧:自定義Logcat
- logcat命令使用方法和查看android系統(tǒng)日志緩沖區(qū)內(nèi)容的方法
- android真機(jī)調(diào)試時(shí)無(wú)法顯示logcat信息的解決方法介紹
- Android開(kāi)發(fā)筆記之:一分鐘學(xué)會(huì)使用Logcat調(diào)試程序的詳解
- 如何通過(guò)Android Logcat插件分析firebase崩潰問(wèn)題
相關(guān)文章
android圖像繪制(六)獲取本地圖片或拍照?qǐng)D片等圖片資源
從SD卡中獲取圖片資源,或者拍一張新的圖片,然后再進(jìn)行處理(直接處理返回圖片/獲得圖片的地址再處理)接下來(lái)為您詳細(xì)介紹,感興趣的朋友可以了解下2013-01-01
簡(jiǎn)述angular自定義過(guò)濾器在頁(yè)面和控制器中的使用
這篇文章主要介紹了簡(jiǎn)述angular自定義過(guò)濾器在頁(yè)面和控制器中的使用的相關(guān)資料,需要的朋友可以參考下2016-09-09
Android中利用xml文件布局修改Helloworld程序
這篇文章主要介紹了Android中利用xml文件布局修改Helloworld程序 的相關(guān)資料,需要的朋友可以參考下2016-07-07
Android自定義可左右滑動(dòng)和點(diǎn)擊的折線(xiàn)圖
這篇文章主要為大家詳細(xì)介紹了Android自定義可左右滑動(dòng)和點(diǎn)擊的折線(xiàn)圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04
Android截屏SurfaceView黑屏問(wèn)題的解決辦法
這篇文章主要為大家詳細(xì)介紹了Android截屏SurfaceView黑屏問(wèn)題的解決辦法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
android圖片文件的路徑地址與Uri的相互轉(zhuǎn)換方法
下面小編就為大家?guī)?lái)一篇android圖片文件的路徑地址與Uri的相互轉(zhuǎn)換方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
Android編程簡(jiǎn)單實(shí)現(xiàn)撥號(hào)器功能的方法
這篇文章主要介紹了Android編程簡(jiǎn)單實(shí)現(xiàn)撥號(hào)器功能的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android撥號(hào)器功能的實(shí)現(xiàn)原理、步驟、操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-07-07

