自 Android 11 开始,应用程序只能访问其应用特定目录和用户明确授予的访问权限。这个新的存储权限模型称为 "scoped storage",涉及到了许多更改和限制。其中一个主要变化是应用程序不再直接访问所有文件系统中的文件。因此,在 Android 11 系统上,很多应用程序都面临着文件读取、写入等方面的问题。
解决这个问题的方法是使用 SAF(Storage Access Framework)API 向用户请求权限。这里提供了一个示例代码,演示如何通过 SAF API 来获取权限。
首先需要在 AndroidManifest.xml 文件中声明 REQUEST_CODE_FOR_PERMISSION 常量。
然后在 MainActivity 类中定义 REQUEST_CODE_FOR_PERMISSION 常量 和 requestPermission 方法:
private static final int REQUEST_CODE_FOR_PERMISSION = 123;
...
private void requestPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, REQUEST_CODE_FOR_PERMISSION);
}
} else {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, REQUEST