Android 如何以编程方式从logcat连续获取日志?

Android 如何以编程方式从logcat连续获取日志?,android,adb,Android,Adb,我使用logcat和以下程序获取android日志: Process process=runtime.exec("logcat"); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); FileOutputStream fos=new FileOutputStream("/sdcard/Pictures/logs.txt"); String lin

我使用logcat和以下程序获取android日志:

Process process=runtime.exec("logcat"); 
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream())); 
FileOutputStream fos=new FileOutputStream("/sdcard/Pictures/logs.txt");
String line; while((line=bufferedReader.readLine())!=null){
        fos.write(line.getBytes()); 
}
但问题是它会一次获取所有日志并写入文件

但是,我希望继续轮询logcat以查找新日志,并希望在有新日志可用时将日志写入文件

您能建议一种方法吗?

尝试添加
fos.flush()编码到您的while循环中

您的周期可能如下所示:

while((line=bufferedReader.readLine())!=null){
    fos.write(line.getBytes());
    fos.flush();
}
这是一个未经测试的解决方案,因此如果它不起作用,请告诉我。

获取logcat

try {
  Process process = Runtime.getRuntime().exec("logcat");
  BufferedReader bufferedReader = new BufferedReader(
  new InputStreamReader(process.getInputStream()));

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

  • 你可以在一个单独的线程上运行它
  • 对日志应用过滤器,因为输出可能是详尽的

这正是我正在做的事情,但问题是它会在那一刻获得可用的日志。如何获取新日志?您必须在服务中运行它,并定期执行它以获取最新的输出,这听起来不是一个好方法。试想一下,如果周期不够短,那么在logcat缓冲区中将有一些日志不可用,系统将丢失这些日志。当您运行logcat命令时,它将转储到该时间戳。因此,要获得新的logcat输出,您必须再次执行logcat。您可以使用时间戳值在特定时间点之后过滤logcat。您是否解决了该问题?