使用Permission Handler请求存储权限时出现清单权限未找到错误
解决Permission Handler v11.1.0权限报错及Audio权限拒绝问题
错误日志对应权限说明
控制台里的数字是Permission Handler内部映射的Android权限常量,对应关系:
[]32→Permission.manageExternalStorage[]9→Permission.audio[]33→Permission.videos[]22→Permission.photos
解决步骤
1. 修正AndroidManifest.xml权限配置及位置
确保权限标签放在<manifest>根节点下(不能嵌套在<application>内),并根据你的targetSdkVersion匹配正确权限:
- 若
targetSdkVersion ≥ 33(Android 13+):<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> - 若
30 ≤ targetSdkVersion ≤ 32(Android 11-12):<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> - 若
targetSdkVersion ≤ 29(Android 10及以下):<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 清理构建缓存
Flutter构建缓存可能导致Manifest未更新,执行以下命令:
flutter clean flutter pub get flutter run
也可以手动删除android/app/build文件夹后重新编译。
3. 处理特殊权限manageExternalStorage
这个权限属于Android特殊权限,无法通过常规弹窗请求,需要引导用户跳转到系统设置授权:
if (await Permission.manageExternalStorage.isDenied) { await Permission.manageExternalStorage.request(); // 如果请求后仍拒绝,引导到设置页 if (await Permission.manageExternalStorage.isPermanentlyDenied) { await openAppSettings(); } }
4. 排查Audio权限拒绝问题
- 若为Android 13+,确认已添加
READ_MEDIA_AUDIO权限;低版本需确保READ_EXTERNAL_STORAGE存在 - 检查用户是否手动拒绝了权限,若为永久拒绝,同样需要引导到设置页开启
5. 验证Manifest是否生效
用Android Studio的APK Analyzer打开编译后的APK,查看AndroidManifest.xml是否包含所有配置的权限,避免被构建工具混淆或移除。
内容的提问来源于stack exchange,提问作者Jagrit
相关产品推荐
相关产品推荐

