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

适配SDK21到30的Android应用如何检查ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION等存储权限

兼容API21-30的存储权限校验方案

你可以直接使用如下单行代码完成全版本权限校验:

boolean hasStoragePermission = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R ? Environment.isExternalStorageManager() : ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;

逻辑说明

  • 运行设备系统版本 ≥ Android 11(API 30):调用Environment.isExternalStorageManager()判断是否已获取全文件访问权限,和官方权限机制完全对应
  • 运行设备系统版本 ≤ Android 10(API 29):使用ContextCompat.checkSelfPermission检查普通存储权限即可,且该方法天生兼容Android 5.x(API 21、22)的安装时授权机制,低于Android 6.0的设备会直接返回已授权

你也可以封装为独立工具方法方便调用:

public boolean isStoragePermissionGranted(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        return Environment.isExternalStorageManager();
    }
    return ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}

配套配置注意事项

你需要在AndroidManifest.xml中补充对应权限声明,保证全版本适配:

<!-- 安卓10及以下使用的存储权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 安卓11及以上使用的全文件管理权限 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />

你现有的权限申请逻辑可以和上述校验方法配合,每次申请权限前先判断是否已经获得权限,避免重复发起申请。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:06:04