在Android中通过后台服务定期将logcat输出写入文件

在Android中通过后台服务定期将logcat输出写入文件,android,Android,我想通过服务将logcat结果写入后台文件。我已经创建了一个服务,并使用以下代码来获得logcat结果 Process process = Runtime.getRuntime().exec("logcat -d"); BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream())); StringBuilder log = new StringBuilder(

我想通过服务将logcat结果写入后台文件。我已经创建了一个服务,并使用以下代码来获得logcat结果

Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log = new StringBuilder();
String line;
while ((line = bufferedReader.readLine()) != null) {
            log.append(line);
}

现在有了上面的代码,我可以只写一些日志,如果我删除“-d”选项,那么服务就会崩溃。

你现在必须让手机以priveleges R/W为根

授予读取Manifest.xml上的\u日志的权限。 然后在活动的OnCreate()中编写此代码

String pname = getPackageName();
        String[] CMDLINE_GRANTPERMS = { "su", "-c", null };
        if (getPackageManager().checkPermission(android.Manifest.permission.READ_LOGS, pname) != 0) {
            Log.d(TAG, "we do not have the READ_LOGS permission!");
            if (android.os.Build.VERSION.SDK_INT >= 16) {
                Log.d(TAG, "Working around JellyBeans 'feature'...");
                try {
                    // format the commandline parameter
                    CMDLINE_GRANTPERMS[2] = String.format("pm grant %s android.permission.READ_LOGS", pname);
                    java.lang.Process p = Runtime.getRuntime().exec(CMDLINE_GRANTPERMS);
                    int res = p.waitFor();
                    Log.d(TAG, "exec returned: " + res);
                    if (res != 0)
                        throw new Exception("failed to become root");
                } catch (Exception e) {
                    Log.d(TAG, "exec(): " + e);
                    Toast.makeText(getApplicationContext(), "Failed to obtain READ_LOGS permission", Toast.LENGTH_LONG).show();
                }
            }
        } else
            Log.d(TAG, "we have the READ_LOGS permission already!");
然后你的代码应该可以工作,如果不行,就运行这个

Process process = Runtime.getRuntime().exec("su -c logcat D");

你能给我们看一下崩溃吗?@Tofasio hay现在它没有崩溃,但它只记录该应用程序的日志,而不是其他应用程序的日志。。。如何写入其他应用程序的日志-