Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:通过应用程序读取adb logcat日志_Android_Logging_Android Logcat - Fatal编程技术网

Android:通过应用程序读取adb logcat日志

Android:通过应用程序读取adb logcat日志,android,logging,android-logcat,Android,Logging,Android Logcat,我正在尝试编写一个应用程序,读取adb logcat创建的日志。根据和上的代码,我有以下代码: try { Process process = Runtime.getRuntime().exec("logcat"); System.out.println("Process : " + process); // shows process id BufferedReader bufferedReader = new BufferedReader(

我正在尝试编写一个应用程序,读取adb logcat创建的日志。根据和上的代码,我有以下代码:

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,但得到一条消息“cannotbindtcp:5038”。上述代码不读取任何日志。我还尝试使用“logcat*:V”,但我甚至没有得到最低优先级的日志

我给了我的应用程序权限:android.permission.READ_LOGS

我正在Android模拟器上测试我的代码

有人能指出我做错了什么吗

谢谢你的帮助

编辑

我试了一下“logcat-d”,得到了一行日志。在代码中,可以看到提供了try/catch块当我从应用程序中删除权限读取日志时,不会引发异常,bufferReader只会打印null(通常当应用程序找不到所需权限时,会引发异常)这种行为的原因是什么?

EDIT2:


我尝试了Log.d(TAG,Log.toString())并得到了多行文本。有人能解释一下上一次编辑的最后一个问题吗:当我删除所需权限时,为什么应用程序没有引发异常?

您可能会收到消息“
无法绑定tcp:5038
”,因为没有

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


在清单中,您永远无法获得通过Runtime.getRuntime()读取日志的权限

android开发团队决定停止向第三方应用授予这些权限。现在只有系统应用程序才能获取它们


更多详细信息:

它应该是“logcat-d”afaik。但是您可能会得到一个ANR,因为它不会停止读取日志。您需要在后台线程、异步任务或类似的东西中移动读取。编辑:忘记这一点,没有ANR。@zapl我已经编辑了这个问题。您的TextView可以显示多行(
android:singleLine
)吗?您还可以尝试执行
Log.d(“TAG”,Log.toString())tv.setText(log.toString())之后执行code>以验证是否没有显示错误。还是有例外?如果是这样,请将其添加到您的问题中。@zapl当我使用Log.d(“TAG”,Log.toString())显示时,确实会得到多行内容;您能解释一下第二部分吗:当我从应用程序中删除权限时,为什么它不引发异常并将log作为null返回给缓冲区读取器?如果命令无法执行,它似乎不会引发异常。对于
BufferedReader