Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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
Java 无法将logcat输出写入我的应用程序中的文件_Java_Android_Android Logcat - Fatal编程技术网

Java 无法将logcat输出写入我的应用程序中的文件

Java 无法将logcat输出写入我的应用程序中的文件,java,android,android-logcat,Java,Android,Android Logcat,我正在开发一个Android应用程序,我试图将logcat的内容输出到SD卡上的一个文件中 我知道这样一个事实: 来自JellyBean的3P应用程序无法访问系统日志。但是,我相信在我的应用程序中使用logcat,至少会输出日志消息 通过我的应用程序发布。 在我的清单文件中使用写入外部存储权限 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVi

我正在开发一个Android应用程序,我试图将logcat的内容输出到SD卡上的一个文件中

我知道这样一个事实:

来自JellyBean的3P应用程序无法访问系统日志。但是,我相信在我的应用程序中使用logcat,至少会输出日志消息 通过我的应用程序发布。 在我的清单文件中使用写入外部存储权限

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
  //Code 1 - Seems like an app hang. Nothing shown.
  Process process = Runtime.getRuntime().exec("logcat -f /sdcard/mylog");

  //Code 2 - This works however if I run this alone, without the above. 
  FileWriter writer = new FileWriter("/sdcard/mylog");
  writer.append("test");
  writer.close();
}
  catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
我正在运行kitkat的设备上测试我的应用程序


我在这里做错了什么?

当您运行logcat命令时,它不会停止,除非您要求它停止Ctrl+C,否则它会继续运行。您需要使用logcat dump,以便它转储logcat并停止

logcat -d
这将转储logcat的当前内容,并在完成后完成

编辑:

从Jellybean开始,在没有root权限的情况下,这将不再适用于设备。

您可以尝试以下代码:

try {
            Process process = Runtime.getRuntime().exec("logcat -f");

            Log.d("TAG", "my test phrase");

            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));

            StringBuilder log=new StringBuilder();
            String line;

            FileWriter fw = new FileWriter("/sdcard/mylog");

            while ((line = bufferedReader.readLine()) != null) {
                fw.append(line);
            }

            fw.close();
        } catch (IOException e) {
        }
这对我有用。希望能有帮助


是的,我也试过了。使用logcat-d-f/sdcard/mylog似乎也没有什么帮助。哦,从设备方面看,它似乎不再起作用了。您需要root权限才能立即使用logcat命令。您是否在清单文件中设置了android.permission.READ_LOGS权限?Hiemanshu,您能否引用找到该信息的来源?Busyley,是的,我有。@Hiemanshu,若它需要root权限来读取手机上的日志文件,adb是怎么做到的?我认为这是不对的,如果有帮助的话。您可以在该链接的底部阅读文本。您可以尝试在手机或平板电脑的生命周期中路由输出。但我不确定这需要什么权限。