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

Android Studio编写API30全文件访问权限申请代码报错如何解决

Android Studio 全文件访问权限代码报错修复

你当前使用的权限申请实现代码如下:

protected void onCreate(final Bundle bundle) {
        if (Build.VERSION.SDK_INT >= 30){
            if (!Environment.isExternalStorageManager()){
                Intent getpermission = new Intent();
                getpermission.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
                startActivity(getpermission);
            }
        }
}

报错截图:
Android Studio 运行报错截图


报错核心原因

  • 重写Activity生命周期方法onCreate时,没有调用父类实现super.onCreate(bundle),会直接触发SuperNotCalledException崩溃
  • 未在AndroidManifest.xml中声明MANAGE_EXTERNAL_STORAGE权限,导致权限申请逻辑无效
  • 直接使用ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION跳转在部分定制ROM上会出现找不到对应Activity的崩溃,且该动作会打开全局应用权限列表,需要用户手动查找目标应用,适配性差

修复步骤

  1. 打开项目路径下的app/src/main/AndroidManifest.xml文件,在<manifest>根节点下、与<application>节点平级的位置添加权限声明:
<!-- Android 11(API30)及以上全文件访问权限 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<!-- 兼容低版本Android的存储权限 -->
<uses-permission
    android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="29" />
  1. 替换原有Activity中onCreate方法的代码,补全父类方法调用、修正权限跳转逻辑,增加异常兜底:
@Override
protected void onCreate(final Bundle bundle) {
    // 重写onCreate必须先调用父类实现,否则会触发运行时崩溃
    super.onCreate(bundle);
    // 仅在Android 11及以上版本执行全文件权限申请逻辑
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        if (!Environment.isExternalStorageManager()) {
            Intent permissionIntent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            // 携带当前应用包名,直接跳转到本应用的权限设置页
            permissionIntent.setData(Uri.fromParts("package", getPackageName(), null));
            try {
                startActivity(permissionIntent);
            } catch (ActivityNotFoundException e) {
                // 部分ROM无单应用权限页时,兜底跳转到全局权限列表
                startActivity(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));
            }
        }
    }
}
  1. 如果编辑代码时出现类名报红,将光标定位到报红位置,按Alt+Enter(Windows)/Option+Enter(Mac)即可自动导入需要的依赖类。

补充说明

  • MANAGE_EXTERNAL_STORAGE属于高风险权限,仅当应用核心功能需要访问设备存储根目录(如文件管理器、整机备份工具等场景)时才可使用,普通文件读写需求请使用Android分区存储相关API,否则会被应用市场审核驳回
  • 用户从权限设置页返回应用后,需要在onResume生命周期中重新调用Environment.isExternalStorageManager()检查授权状态,再执行后续需要权限的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:48:21