Android 如何以编程方式从logcat连续获取日志?
我使用logcat和以下程序获取android日志: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
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。您是否解决了该问题?