2016-03-28 93 views
0

我有一个场景,我需要读取连续在logcat上以一秒为间隔发送的数据。所以,我已经调用这个类方法的线程,但我在例外像在我的android应用程序中获取Android日志

Working Directory: null Environment: null 

我已经添加了允许像

<uses-permission android:name="android.permission.READ_LOGS" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 

代码是

public class LogsUtil { 

    public static StringBuilder readLogs() { 
     StringBuilder logBuilder = new StringBuilder(); 
     try { 

      String[] cmd = new String[] { "logcat | find \\ Keymaster" /*"logcat", "-v", "time", "ActivityManager:W", "Keymaster:D"*/ }; 
      //Process processClear = new ProcessBuilder().command("logcat -c").redirectErrorStream(true).start(); 

      //String cmd[] = new String[]{"logcat"}; 

      Process process = Runtime.getRuntime().exec(/*"logcat -d"*/cmd); 

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

      String line; 
      while ((line = bufferedReader.readLine()) != null) { 
       Log.e(" ", ""+bufferedReader.readLine()); 
       logBuilder.append(line + "\n"); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     return logBuilder; 
    } 
} 

精确记录结束了需要阅读的是 enter image description here

如何获得相同的数据打印?

+0

常用的日志我认为你应该使用'的logcat -d'否则该过程从未停止过 – Lino

+0

试了一下,我得到java.io.IOException异常:错误运行EXEC()。命令:[logcat -d]工作目录:null环境:null –

+0

是您的设备根源? – Lino

回答

0

,如果你需要你自己的日志,我建议只使用自己的记录

<uses-permission android:name="android.permission.READ_LOGS" />

太反感,我就可以使用

String[] cmd = new String[] {"logcat", "-d", "Keymaster:V *:S" } 

但是。

您可以使用Timber来根据您的需要使用特定的本地记录器。 或者与可视化形式the google examples

+0

我试过你问过的cmd,我正在06-24 12:00:48.304:E /(30012):虽然是真的-------- -/dev/log/main的开头 06-24 12:00:49.281:E /(30012):null –

+0

我在应用程序界面上需要的那些日志不是来自我的应用程序,而是来自我的应用程序基础库。我无法访问产生该消息的侦听器,因此我现在正在执行解决方法 –

+0

您可以从您的应用程序获取任何内容,也可以从您使用的其他库中获取本机日志。但是,如果您从其他应用程序读取日志,则不能在android> = 4.1上执行该操作,除非您拥有根设备,开发/工程构建,您的应用程序位于系统分区中,或者您与设备上的权限或道具混淆。 您可以尝试使用反射来挂钩这些日志。你使用的这个keymaster库是什么? – djodjo

相关问题