我有这样的问题,我尝试以编程方式从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。此代码在服务中运行。
答案 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