Flutter中Android SDK33模拟器存储权限请求失效问题
问题修复方案
问题根源
Android 13(SDK 33)彻底废弃了WRITE_EXTERNAL_STORAGE权限,改用按媒体类型拆分的权限,旧权限声明不再触发权限请求弹窗,导致你看到"永久拒绝"和"无权限请求"的异常。
具体修复步骤
更新AndroidManifest.xml权限配置
根据你要访问的存储内容类型,替换原有权限:- 若访问图片/视频/音频等媒体文件,添加对应权限:
<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" /> - 如需兼容Android 12及以下版本,保留旧权限并限制SDK版本:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
- 若访问图片/视频/音频等媒体文件,添加对应权限:
修改Flutter权限请求代码
使用permission_handler库对应Android 13的权限枚举,替换原有的Permission.storage:void test() async { // 示例:请求图片访问权限 PermissionStatus mediaStatus = await Permission.photos.request(); if (mediaStatus == PermissionStatus.granted) { print("权限已授予"); } else if (mediaStatus == PermissionStatus.denied) { print("权限被拒绝"); } else if (mediaStatus == PermissionStatus.permanentlyDenied) { openAppSettings(); } // 如需访问视频/音频,替换为Permission.videos / Permission.audio }确保你的
permission_handler库是最新稳定版,避免版本过低不支持新权限。检查项目配置
确认android/app/build.gradle中编译目标版本不低于33:android { compileSdkVersion 33 defaultConfig { targetSdkVersion 33 } }验证操作
彻底卸载模拟器中的旧应用,执行flutter clean后重新构建安装,测试权限请求流程。
额外提示
如果仅需访问应用专属存储(比如app内部文件),无需申请任何权限,直接通过path_provider库的getApplicationDocumentsDirectory()等API访问即可。
内容的提问来源于stack exchange,提问作者giji676
相关产品推荐
相关产品推荐

