已获取MANAGE_EXTERNAL_STORAGE权限仍报Permission Denied问题求助
解决方法
核心问题:禁止直接访问根目录
MANAGE_EXTERNAL_STORAGE权限不允许直接遍历/根目录,即使权限已授予,系统也会拦截这类操作。你的findRoot方法最终返回了根目录,这是抛出异常的直接原因。调整目标目录
改为访问外部存储的合法目录,比如:// 获取外部存储公共目录(如Documents) final Directory targetDir = Directory('/storage/emulated/0/Documents'); await targetDir.list(recursive: true);或者使用Flutter提供的路径API获取合法路径,避免手动遍历到根目录。
完善权限申请流程
MANAGE_EXTERNAL_STORAGE属于特殊权限,仅通过permission.request()无法直接授予,需要引导用户到系统设置手动开启:final status = await permission.request(); if (status == PermissionStatus.permanentlyDenied || status == PermissionStatus.denied) { await openAppSettings(); // 需要引入permission_handler包的openAppSettings方法 }确保用户在设置中开启了"允许管理所有文件"权限。
适配Android版本
- 该权限仅在Android 11(API 30)及以上生效,低版本需使用
READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE+requestLegacyExternalStorage。 - 若仅针对Android 11+,可移除
android:requestLegacyExternalStorage="true"配置。
- 该权限仅在Android 11(API 30)及以上生效,低版本需使用
验证权限状态
打印权限状态确认是否真的授予,或直接到系统设置查看应用权限,避免权限状态返回值与实际情况不符。
内容的提问来源于stack exchange,提问作者Ginso
相关产品推荐
相关产品推荐

