我正在尝试编写一个应用程序来读取adb logcat创建的日志。按照link1和link2上的代码,我有以下代码:
try {
Process process = Runtime.getRuntime().exec("logcat");
System.out.println("Process : " + process); // shows process id
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
System.out.println("Buffered reader : " + bufferedReader.readLine());
StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(log.toString());
} catch (IOException e) {
}
为了测试缓冲读卡器正在读取什么,我放了一个println,但是我收到一条消息“无法绑定tcp:5038”。上面的代码不会读取任何日志。我也尝试使用“logcat *:V”,但我没有得到甚至最低优先级的日志。
我给了我的应用程序权限:android.permission.READ_LOGS。
我在Android模拟器上测试我的代码。
有人可以指出我做错了什么。
感谢您的帮助。
修改:
我尝试了“logcat -d”,我得到了一行日志。在代码中,可以观察到提供了try / catch块; 当我从应用程序中删除权限READ_LOGS时,不会引发异常并且bufferReader只是打印出null(通常当应用程序找不到它需要的权限时,它会引发异常)。 这种行为的原因是什么?
EDIT2:
我尝试了Log.d(TAG,log.toString())并获得了多行文本。有人可以解释上一个编辑中的最后一个问题:当我删除所需的权限时,为什么应用程序不会引发异常?
答案 0 :(得分:3)
您可能会收到消息" cannot bind tcp:5038
"由于没有
<uses-permission android:name="android.permission.INTERNET" />
你的清单中的
答案 1 :(得分:0)
您永远无法通过Runtime.getRuntime()获取读取日志的权限。
Android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用才能获得它们。