如何以编程方式为其他应用程序读取android log cat

时间:2014-03-02 12:10:28

标签: android

我已经读过你无法读取其他应用程序的日志。此外,像App Lock这样的应用程序不断读取日志以查找已启动的应用程序然后显示其锁定屏幕。所以他们必须完全阅读日志。

我想为所有应用阅读这样的日志。 I / ActivityManager(585):开始活动:Intent {action = android.intent.action ...}

我们是否必须是root用户才能阅读日志。

2 个答案:

答案 0 :(得分:3)

从JellyBean开始,你可以在你的应用程序没有放在LogCat中的no longer read anything

在JellyBean之前,并为自己的应用发布JellyBean,您可以使用Runtime to execute command line arguments来检索logcat

答案 1 :(得分:0)

正如@Raghav所说,你无法从Android 4.1+中读取其他应用程序的Logcat,但可以在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这样的应用程序不断读取日志(即他们轮询)以查找已启动的应用程序,然后呈现自己的锁定屏幕活动。如何在不阅读日志的情况下这样做,或者是否有其他方法可以确定应用程序是否已启动。

如果你真的想这样做,你可以在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());