在 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录