Android 11+ 文件访问权限配置示例代码
在 Android 11 (Android R) 及以上版本中,为了加强对用户数据的保护,Android 引入了新的文件访问权限管理机制。开发者需要申请 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION 权限才能访问所有外部存储空间。
配置示例代码
1. 在 AndroidManifest.xml 文件中添加权限声明:
<uses-permission android:name='android.permission.MANAGE_EXTERNAL_STORAGE' />
2. 在 Activity 或 Fragment 中请求权限:
private static final int REQUEST_CODE_MANAGE_ALL_FILES_ACCESS_PERMISSION = 100;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivityForResult(intent, REQUEST_CODE_MANAGE_ALL_FILES_ACCESS_PERMISSION);
} else {
// 已经拥有文件访问权限的处理逻辑
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_MANAGE_ALL_FILES_ACCESS_PERMISSION) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && Environment.isExternalStorageManager()) {
// 已经获得文件访问权限的处理逻辑
} else {
// 未获得文件访问权限的处理逻辑
}
}
}
上述代码首先检查设备是否运行 Android 11 及以上版本,并且用户是否具有文件访问权限。如果用户没有文件访问权限,则会打开系统的权限管理界面,让用户授予文件访问权限。在 onActivityResult 方法中,根据用户的选择进行相应的处理逻辑。
说明
- 为了确保代码的兼容性,请在使用
Environment.isExternalStorageManager()方法之前,先检查设备是否运行 Android 11 及以上版本。 - 如果用户拒绝授予文件访问权限,则
Environment.isExternalStorageManager()方法会返回false。 - 为了保障用户数据安全,Android 11 及以上版本限制了对外部存储空间的访问权限,开发者需要通过申请
ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION权限才能访问所有外部存储空间。
原文地址: http://www.cveoy.top/t/topic/pb6R 著作权归作者所有。请勿转载和采集!