中文字幕在线流畅不卡精品,在线视频综合站,国产精品137页,亚洲制服丝袜中文字幕在

<td id="urspe"></td>
<small id="urspe"><menuitem id="urspe"></menuitem></small><small id="urspe"><sup id="urspe"></sup></small>

  • <small id="urspe"></small>
    <sub id="urspe"><menu id="urspe"><samp id="urspe"></samp></menu></sub>
    我要投稿 投訴建議

    Android開(kāi)發(fā)在程序中獲取logcat日志信息的方法

    時(shí)間:2021-04-13 13:33:22 日志日記 我要投稿

    Android開(kāi)發(fā)在程序中獲取logcat日志信息的方法

      今天分享一個(gè)在軟件開(kāi)發(fā)中很實(shí)用的例子,也是這幾天在通宵加班中我使用的一個(gè)小例子, 在程序中監(jiān)聽(tīng)Log信息。

    Android開(kāi)發(fā)在程序中獲取logcat日志信息的方法

      為什么說(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)它。

      @Overridepublic 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)

      @Overridepublic 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)不到的。

      效果圖:

    【Android開(kāi)發(fā)在程序中獲取logcat日志信息的方法】相關(guān)文章:

    linux系統(tǒng)中查看日志方法07-02

    經(jīng)典日志菊花年年開(kāi)06-19

    Android SD卡上文件操作及記錄日志操作具體方法06-23

    在Ubuntu系統(tǒng)中清楚Bash日志記錄方法07-02

    《指尖暈開(kāi)的涼》日志06-30

    高三獲取成功的方法建議12-17

    android 捕獲系統(tǒng)異常并上傳日志的實(shí)例06-23

    C++日志記錄類(lèi)以及日志記錄程序06-23

    microlog4android如何將Android Log日志寫(xiě)到SD卡文件06-23