以编程方式读取Android logcat时,并非显示所有数据

时间:2013-05-28 15:14:19

标签: android logcat

我有这样的问题,我尝试以编程方式从logcat获取数据。权限也已添加到清单文件中:

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

代码:

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Process process = Runtime.getRuntime().exec("logcat ActivityManager:I *:S");
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    reactOnString(line);
                }
            } catch (IOException e) {
            }
        }
    }).start();

然而,我无法看到其他应用何时推出。我正在等待下面的字符串,但它们没有出现。

2260-2566/system_process                 I/ActivityManager: Start proc com.android.email for activity com.android.email/.activity.MessageCompose: pid=6460 uid=10011 gids={50011, 3003, 1015, 1023, 1028}

P.S。此代码在服务中运行。

2 个答案:

答案 0 :(得分:8)

我有个坏消息:从JB开始,READ_LOGS不再像以前一样工作了:

https://groups.google.com/forum/?fromgroups#!topic/android-developers/6U4A5irWang

(滚动到Dianne Hackborn的帖子,Android Develper)和这个视频:

Google I/O 2012 - Ten Things Game Developers Should Know

(22:47)官方消息来源。

然而,他尚未记录(READ_LOGS许可不会报告此情况)并且仍然是混乱的根源。您现在只能访问自己的日志,而且好消息是,您不再需要再获取权限(如果您的目标是Jelly Beans,那就是它......)。

我想这是Android开发团队为防止恶意应用程序监视用户而做出的妥协,也许是获取敏感信息(我不打赌每个应用程序开发人员在发布之前清除它自己的Log.d语句)。

希望这有帮助

答案 1 :(得分:3)

从Android Jelly Bean,应用程序无法读取其他应用程序的日志条目,除非您的设备已植根并且您以超级用户身份阅读日志。

所以基本上......这是预期的行为。

我在Android文档中找不到任何官方声明(如果有人可以编辑此答案),但您可能有兴趣看一下这个答案: https://android.stackexchange.com/questions/28857/how-can-i-access-android-log-files-on-my-nexus-7-without-root-access