在Android 11中,访问外部存储需要特殊的运行时权限。以下是获取运行时权限的示例代码。
首先,在AndroidManifest.xml中添加以下权限:
然后,在运行时请求权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// 执行需要访问外部存储的操作
} else {
// 请求权限
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
} catch (Exception e) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivity(intent);
}
}
} else {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_CODE_STORAGE_PERMISSION);
} else {
// 执行需要访问外部存储的操作
}
}
这段代码首先检查设备的Android版本是否大于等于Android 11,如果是,则需检查是否拥有存储管理权限。如果没有,会启动应用程序的设置页面以要求用户授予权限。如果设备的Android版本小于11,则只需请求WRITE_EXTERNAL_STORAGE权限即可。