Android - WRITE_EXTERNAL_STORAGE 权限和写入应用日志

Android - WRITE_EXTERNAL_STORAGE permission and writing app's log

我想要的只是能够在一个非常特定的文件夹(与我的应用程序相关)中为我的应用程序编写一个 log/exception 报告,以便了解失败和异常,所以这是我的代码我正在使用:

File logFile = new File(Environment.getExternalStorageDirectory() + File.separator + "/appname/log.txt");
if (!logFile.exists()) {
    try {
        if (logFile.getParentFile().mkdir()) {
            if (!logFile.createNewFile())
                showPopup(context.getString(R.string.app_name), "error creating log file");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
try {
    BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
    buf.append(text);
    buf.newLine();
    buf.flush();
    buf.close();
} catch (IOException e) {
    e.printStackTrace();
}

为了上面的工作,我必须添加以下权限:android.permission.WRITE_EXTERNAL_STORAGE但是当用户阅读它时,它说读写外部存储并且可以理解,这吓跑了用户。有没有更好的方法来记录我的应用程序的行为并为此使用不那么可怕的权限?

首先,切换自:

File logFile = new File(Environment.getExternalStorageDirectory() + File.separator + "/appname/log.txt");

至:

File logFile = new File(context.getExternalFilesDir(), "log.txt");

这不仅避免了在创建路径时手动进行字符串连接,而且不仅避免了用户的外部存储被随机的特定于应用程序的目录弄得乱七八糟,而且现在还意味着您可以:

<uses-permission
  android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  android:maxSdkVersion="18" />

在 API 级别 19+ 上消除 WRITE_EXTERNAL_STORAGE

除此之外,尝试将 targetSdkVersion 提高到 4 或更高。引用 the docs for READ_EXTERNAL_STORAGE:

Note: If both your minSdkVersion and targetSdkVersion values are set to 3 or lower, the system implicitly grants your app this permission. If you don't need this permission, be sure your targetSdkVersion is 4 or higher.

试试这个:

File storageDir = new File(Environment.getExternalStorageDirectory(), "your folder name");
storageDir.mkdir();

将此代码放入您的清单文件:

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