Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将android logcat保存在android设备上的文件中_Android_Android Logcat - Fatal编程技术网

将android logcat保存在android设备上的文件中

将android logcat保存在android设备上的文件中,android,android-logcat,Android,Android Logcat,我想在我的设备上的文件中写入Android logcat。 为此,我使用了以下代码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(isExternalStorageWritable()){ File appDirectory = new File(Environment.getExternalStorageDirectory(

我想在我的设备上的文件中写入Android logcat。 为此,我使用了以下代码

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    if(isExternalStorageWritable()){
        File appDirectory = new File(Environment.getExternalStorageDirectory()+ "/MyAppfolder");
        File logDirectory = new File(appDirectory + "/log");
        File logFile = new File(logDirectory, "logcat"+System.currentTimeMillis()+".txt");

        if(!appDirectory.exists()){
            appDirectory.mkdir();
        }

        if(!logDirectory.exists()){
            logDirectory.mkdir();
        }

        if(!logFile.exists()){
            try {
                logFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        try{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
                }
            }
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }
    else if (isExternalStorageReadable()){
        Log.i(TAG, "ONLY READABLE");
    }
    else{
        Log.i(TAG, "NOT ACCESSIBLE");
    }}

    public boolean isExternalStorageReadable(){

    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
        return true;
    }
    return false;
}
   public boolean isExternalStorageWritable(){

    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)){
        return true;
    }
    return false;
}
我在AndroidManifest.xml中添加了权限

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

文件夹和文件已创建,但文件始终为空。
如何改进代码,以便将日志猫写入文件。

可能您没有将日志写入文件。您缺少此方法

 /* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if ( Environment.MEDIA_MOUNTED.equals( state ) ) {
        return true;
    }
    return false;
}

您的代码取自此问题的解决方案。请查看。

可能您没有将日志写入该文件。您缺少此方法

 /* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if ( Environment.MEDIA_MOUNTED.equals( state ) ) {
        return true;
    }
    return false;
}

您的代码取自此问题的解决方案。请查看。

很高兴回答您的问题

在我的项目中,我用这个来解决这个问题

1.添加此类

public class LogcatHelper {

private static LogcatHelper INSTANCE = null;
private static String PATH_LOGCAT;
private LogDumper mLogDumper = null;
private int mPId;

/**
 * init data
 */
public void init(Context context) {
    if (Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED)) {// sd first
        PATH_LOGCAT = Environment.getExternalStorageDirectory()
                .getAbsolutePath() + File.separator + "logcat";
    } else {
        PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
                + File.separator + "logcat";
    }
    File file = new File(PATH_LOGCAT);
    if (!file.exists()) {
        file.mkdirs();
    }
}

public static LogcatHelper getInstance(Context context) {
    if (INSTANCE == null) {
        INSTANCE = new LogcatHelper(context);
    }
    return INSTANCE;
}

private LogcatHelper(Context context) {
    init(context);
    mPId = android.os.Process.myPid();
}

public void start() {
    if (mLogDumper == null)
        mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);
    mLogDumper.start();
}

public void stop() {
    if (mLogDumper != null) {
        mLogDumper.stopLogs();
        mLogDumper = null;
    }
}

private class LogDumper extends Thread {

    private Process logcatProc;
    private BufferedReader mReader = null;
    private boolean mRunning = true;
    String cmds = null;
    private String mPID;
    private FileOutputStream out = null;

    public LogDumper(String pid, String dir) {
        mPID = pid;
        try {
            out = new FileOutputStream(new File(dir, "logcat"
                    + getFileName() + ".log"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        /**
         *
         * Level:*:v , *:d , *:w , *:e , *:f , *:s
         *
         *
         * */

        // cmds = "logcat *:e *:w | grep \"(" + mPID + ")\""; // print e level and ilevel info
        // cmds = "logcat  | grep \"(" + mPID + ")\"";// print all
        // cmds = "logcat -s way";// print filter info
        cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";

    }

    public void stopLogs() {
        mRunning = false;
    }

    @Override
    public void run() {
        try {
            logcatProc = Runtime.getRuntime().exec(cmds);
            mReader = new BufferedReader(new InputStreamReader(
                    logcatProc.getInputStream()), 1024);
            String line = null;
            while (mRunning && (line = mReader.readLine()) != null) {
                if (!mRunning) {
                    break;
                }
                if (line.length() == 0) {
                    continue;
                }
                if (out != null && line.contains(mPID)) {
                    out.write((getDateEN() + "  " + line + "\n")
                            .getBytes());
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (logcatProc != null) {
                logcatProc.destroy();
                logcatProc = null;
            }
            if (mReader != null) {
                try {
                    mReader.close();
                    mReader = null;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                out = null;
            }

        }

    }

}

public static String getFileName() {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    String date = format.format(new Date(System.currentTimeMillis()));
    return date;
}

public static String getDateEN() {
    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date1 = format1.format(new Date(System.currentTimeMillis()));
    return date1;
}
}

  • 在应用程序类中添加代码

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
                }
            }
    
    LogcatHelper.getInstance((getApplicationContext()).start()

  • 3.在应用程序类中添加权限

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
                }
            }
    

    希望我能帮助你。

    很高兴回答你的问题

    if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    
    }
    else{
    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
    }
    
    在我的项目中,我用这个来解决这个问题

    1.添加此类

    public class LogcatHelper {
    
    private static LogcatHelper INSTANCE = null;
    private static String PATH_LOGCAT;
    private LogDumper mLogDumper = null;
    private int mPId;
    
    /**
     * init data
     */
    public void init(Context context) {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {// sd first
            PATH_LOGCAT = Environment.getExternalStorageDirectory()
                    .getAbsolutePath() + File.separator + "logcat";
        } else {
            PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
                    + File.separator + "logcat";
        }
        File file = new File(PATH_LOGCAT);
        if (!file.exists()) {
            file.mkdirs();
        }
    }
    
    public static LogcatHelper getInstance(Context context) {
        if (INSTANCE == null) {
            INSTANCE = new LogcatHelper(context);
        }
        return INSTANCE;
    }
    
    private LogcatHelper(Context context) {
        init(context);
        mPId = android.os.Process.myPid();
    }
    
    public void start() {
        if (mLogDumper == null)
            mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);
        mLogDumper.start();
    }
    
    public void stop() {
        if (mLogDumper != null) {
            mLogDumper.stopLogs();
            mLogDumper = null;
        }
    }
    
    private class LogDumper extends Thread {
    
        private Process logcatProc;
        private BufferedReader mReader = null;
        private boolean mRunning = true;
        String cmds = null;
        private String mPID;
        private FileOutputStream out = null;
    
        public LogDumper(String pid, String dir) {
            mPID = pid;
            try {
                out = new FileOutputStream(new File(dir, "logcat"
                        + getFileName() + ".log"));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
            /**
             *
             * Level:*:v , *:d , *:w , *:e , *:f , *:s
             *
             *
             * */
    
            // cmds = "logcat *:e *:w | grep \"(" + mPID + ")\""; // print e level and ilevel info
            // cmds = "logcat  | grep \"(" + mPID + ")\"";// print all
            // cmds = "logcat -s way";// print filter info
            cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";
    
        }
    
        public void stopLogs() {
            mRunning = false;
        }
    
        @Override
        public void run() {
            try {
                logcatProc = Runtime.getRuntime().exec(cmds);
                mReader = new BufferedReader(new InputStreamReader(
                        logcatProc.getInputStream()), 1024);
                String line = null;
                while (mRunning && (line = mReader.readLine()) != null) {
                    if (!mRunning) {
                        break;
                    }
                    if (line.length() == 0) {
                        continue;
                    }
                    if (out != null && line.contains(mPID)) {
                        out.write((getDateEN() + "  " + line + "\n")
                                .getBytes());
                    }
                }
    
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (logcatProc != null) {
                    logcatProc.destroy();
                    logcatProc = null;
                }
                if (mReader != null) {
                    try {
                        mReader.close();
                        mReader = null;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    out = null;
                }
    
            }
    
        }
    
    }
    
    public static String getFileName() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String date = format.format(new Date(System.currentTimeMillis()));
        return date;
    }
    
    public static String getDateEN() {
        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String date1 = format1.format(new Date(System.currentTimeMillis()));
        return date1;
    }
    
    }

  • 在应用程序类中添加代码

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
                }
            }
    
    LogcatHelper.getInstance((getApplicationContext()).start()

  • 3.在应用程序类中添加权限

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
                }
            }
    
    我希望我能帮助你

    if(checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
    
    }
    else{
    Process process = Runtime.getRuntime().exec("logcat -f "+logFile);
    }
    
    您的代码工作正常,可能是因为您错误地编写了“请求权限”和“生成日志文件”


    您的代码工作正常,可能是由于错误,您已经同时编写了请求权限和制作日志文件

    您在哪里将内容写入文件?如果您将在比Marshmallow更旧的设备上运行应用程序,Logcat将不会存储在文件中。android版本为6.0.1。您在哪里将内容写入文件?如果您将在更旧的设备上运行应用程序,Logcat将不会存储在文件中安卓版本是6.0.1。是的,我从你提到的问题中得到了答案。我的代码中有此功能尝试在设备
    设置>选择你的应用>权限>切换所有权限中授予你的应用权限。我不确定,但试一试。是的,我从你提到的问题中得到了答案。我的代码中有此功能尝试在设备
    设置>选择你的应用>权限>切换所有权限中授予你的应用权限。我不确定,但请试一试。谢谢你的帮助。你的回答解决了我的问题。谢谢你的帮助。你的回答解决了我的问题。