You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 11如何判断应用当前是否拥有All Files Access权限

Android 11 所有文件访问(All Files Access)权限校验方案

Android 11(API 30)引入的分区存储机制中,All Files Access属于特殊权限,无法用普通运行时权限的checkSelfPermission方法校验,需按系统版本做兼容处理:

  • 系统版本低于API 30(Android 11):不存在该权限项,只要应用获得READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE普通存储权限,即拥有全文件访问能力。
  • 系统版本为API 30及以上:直接调用系统公开API Environment.isExternalStorageManager()判断,方法返回true即为已授权,返回false即为未授权。

可直接复用的校验方法代码

public boolean checkAllFilesAccessPermission() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
        // 低版本校验普通存储权限状态
        return ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
    }
    // Android 11及以上版本走专用校验逻辑
    return Environment.isExternalStorageManager();
}

配套注意事项

不要完全依赖startActivityForResult的回调结果判断授权状态。部分定制ROM修改了系统权限页的返回逻辑,不会返回标准resultCode,建议在页面onResume生命周期中重新调用上述校验方法,获取真实权限状态,避免判断失效。

必要清单配置

使用该权限必须先在AndroidManifest.xml中添加对应声明,否则跳转至权限设置页后不会显示授权开关:

<!-- 所有文件访问权限声明 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<!-- 低版本兼容用普通存储权限 -->
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="29" />

完整调用示例

结合你之前的权限申请跳转逻辑,完整调用流程如下:

private final int REQ_ALL_FILES_ACCESS = 2296;

// 触发权限申请
private void requestAllFilesPermission() {
    if (checkAllFilesAccessPermission()) {
        // 已获得权限,直接执行业务逻辑
        executeFileBusiness();
        return;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
        intent.addCategory("android.intent.category.DEFAULT");
        intent.setData(Uri.parse(String.format("package:%s", this.getPackageName())));
        startActivityForResult(intent, REQ_ALL_FILES_ACCESS);
    } else {
        // 低版本申请普通存储权限
        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
            1001);
    }
}

@Override
protected void onResume() {
    super.onResume();
    // 从权限设置页返回时,重新校验权限状态
    if (checkAllFilesAccessPermission()) {
        executeFileBusiness();
    }
}

内容的提问来源于stack exchange,提问作者Oky Prasetya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:15:55