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

Flutter中Android SDK33模拟器存储权限请求失效问题

问题修复方案

问题根源

Android 13(SDK 33)彻底废弃了WRITE_EXTERNAL_STORAGE权限,改用按媒体类型拆分的权限,旧权限声明不再触发权限请求弹窗,导致你看到"永久拒绝"和"无权限请求"的异常。

具体修复步骤

  1. 更新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" />
      
  2. 修改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库是最新稳定版,避免版本过低不支持新权限。

  3. 检查项目配置
    确认android/app/build.gradle中编译目标版本不低于33:

    android {
        compileSdkVersion 33
    
        defaultConfig {
            targetSdkVersion 33
        }
    }
    
  4. 验证操作
    彻底卸载模拟器中的旧应用,执行flutter clean后重新构建安装,测试权限请求流程。

额外提示

如果仅需访问应用专属存储(比如app内部文件),无需申请任何权限,直接通过path_provider库的getApplicationDocumentsDirectory()等API访问即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:25:38