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

时间:2014-07-04 11:00:13

标签: java android android-logcat

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

我知道

这个事实
  • 来自JellyBean 3P应用程序无权访问系统日志。但是,我相信在我的应用程序中使用logcat,输出至少日志消息 由我的应用程序推出。
  • 在我的清单文件中使用WRITE_EXTERNAL_STORAGE权限。

    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的设备上测试我的应用。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

当您运行命令logcat时,它不会停止,它会一直运行,除非您要求它停止(Ctrl + C)。您需要使用logcat转储,以便它转储logcat并停止。

logcat -d

这将转储logcat的当前内容并在完成后完成。

编辑:

从Jellybean开始,这不再适用于没有root权限的设计。

答案 1 :(得分:0)

您可以尝试以下代码:

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) {
        }

这对我有用。希望它有所帮助。

More info