我有一个服务,想要从服务的开始从logcat读取数据(即在服务启动之前丢弃logcat数据),实时监控logcat数据,过滤logcat只显示标签“ ActivityManager“和信息日志。
然后,我想根据过滤的logcat数据执行某些操作。我尝试了以下方法,但它不起作用:
Runtime.getRuntime().exec("logcat -c"); // flush the logcat first
Process process = Runtime.getRuntime().exec("logcat ActivityManager:I"); // filters logcat to only "ActivityManager:I" logs
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line = "";
Log.d(TAG, "Reading filtered logcat");
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
有谁知道我哪里出错了?
答案 0 :(得分:1)
好的,事实证明我错过了logcat中的-s参数,它过滤了logcat输出。
答案 1 :(得分:0)
我建议您查看此SO post中发布的问题和答案。我没有安装工作室的机器,所以我现在不能试试。为了帮助我们回答您的问题,您能否提供一些有关您遇到的问题的更多信息?当你说你所拥有的方法并没有起作用时#34;你什么意思?是' log'的价值?没变?抛出异常?是否给出了日志,但未经过滤?
此外,您尝试执行的操作可能无法在无根设备上运行。正如this SO post/answer所解释的那样,您无法再访问其他应用程序的日志,只能访问您自己的应用程序的日志。这意味着您的服务只能读取它在无根设备上的应用程序日志。