2014-03-02 40 views
1

我讀過,你不能讀取其他應用程序的日誌。此外,像應用程序鎖的應用程序不斷閱讀日誌,以查找哪些應用程序已經開始,然後呈現他們的鎖屏。他們必須完全讀取日誌。如何閱讀安卓日誌貓progamatically其他應用程序

我想爲所有應用程序讀取這樣的日誌。 I/ActivityManager(585):啓動活動:意圖{action = android.intent.action ...}

我們必須是root用戶才能讀取日誌。

回答

3

從JellyBean開始,您可以在LogCat中使用no longer read anything,該應用程序並未將其放在那裏。

此前豆形軟糖,和豆形軟糖後爲自己的應用程序,你可以使用Runtime to execute command line arguments檢索logcat的

+0

但應用程序,如經常和掃描器讀取日誌(即他們調查)發現哪些應用開始,然後提出自己的鎖屏活動。他們如何在沒有閱讀日誌的情況下這麼做,或者有其他方法來確定應用是否已經啓動。 – amit

+0

第一個鏈接已經死亡,因爲它根據谷歌組鏈接到「惡意」組。 – HopefullyHelpful

0

正如@Raghav正確地說,你可以不是從Android電子閱讀logcat的其他應用程序的4.1+但可以在Android 4.1+之前做。

要獲取日誌低於Android 4.1以上版本,請參見下面的代碼或者你可以通過這個線程https://stackoverflow.com/a/6228065/1741671

AndroidManifest.xml中

<uses-permission android:name="android.permission.READ_LOGS" /> 

代碼

Runtime.getRuntime().exec("logcat -c").waitFor(); 
Process process = Runtime.getRuntime().exec("logcat -v long *:*"); 
BufferedReader reader = 
    new BufferedReader(new InputStreamReader(process.getInputStream())); 
while (true) { 
    String nextLine = reader.readLine(); 
    if (!nextLine.contains("LogWatcher-D")) { 
     Log.w("LogWatcher-D", "See: " + nextLine); 
    } 

    // Process line 
} 

但應用程序像AppLock不斷讀取日誌(即他們輪詢)來查找哪些應用程序已啓動,然後顯示自己的鎖定屏幕a ctivity。他們如何在沒有閱讀日誌的情況下這麼做,或者有其他方法來確定應用是否已經啓動。

如果你真的想這樣做,那麼你可以在1-2秒內簡單地運行你的服務來查看哪些應用已經啓動的細節。

你可以這樣做,並添加權限<uses-permission android:name="android.permission.GET_TASKS"/>

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
// get the info from the currently running task 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
Log.d("topActivity", "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName()); 
+0

要每隔一秒運行一次服務,我嘗試了兩件事。一個是運行一個無限循環,睡眠時間爲1秒,另一個是使用Alarm Manager每秒啓動一次服務。在第一種方法中,當我終止服務啓動的活動時,我的服務也停止了。並且我有請注意,只有當重複間隔時間超過10分鐘時,才應使用鬧鐘管理器。因此,我應該如何每秒重複一次服務。用1秒鐘的睡眠時間保持無限循環也是件好事 – amit

相關問題