Android 11 和 Android 9 存储权限的区别在于 Android 11 引入了新的 Scoped Storage API,用于更好地保护用户数据和隐私。相比之下,Android 9 仍然使用传统的存储权限模型。
以下是一个示例代码,用于在 Android 11 上请求存储许可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// Permission granted
} else {
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_STORAGE_PERMISSION);
}
} else {
// Request permission using old method for versions prior to Android 11
}
如果用户已经授予应用程序外部存储访问权限,Environment.isExternalStorageManager()
方法将返回 true
。
否则,我们启动一个新的活动 ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION
,在此活动中提供一个 URI,其中包含应用程序的包名,以便用户可以授予权限。
还需要在 onActivityResult()
方法中处理结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_STORAGE_PERMISSION) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// Permission granted
} else {
// Permission denied
}
} else {
// Permission granted for versions prior to Android 11
}
}
}