在安卓12下,应用程序访问外部存储的权限体系发生了变化,因此直接使用 READ_EXTERNAL_STORAGE 权限访问外部存储会出现问题。首先需要获取 MANAGE_EXTERNAL_STORAGE 权限,然后才能获得对整个外部存储器的读取和写入权限。
以下是在 Android 12 上获取 MANAGE_EXTERNAL_STORAGE 权限的示例代码:
// 判断是否已经有 MANAGE_EXTERNAL_STORAGE 权限 if (Environment.isExternalStorageManager()) { // 已有权限,可以直接访问外部存储 } else { // 没有权限,需要请求 Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); }
这里需要注意的是,Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION 这个 Intent 只会在 Android 11 或更高版本上生效,因此还需要进行权限版本的判断。同时在 manifest 文件中增加如下代码,用于声明应用程序需要此权限:
在申请权限后,程序即可访问外部存储器。