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

Android 13下Flutter存储权限异常:Permission.storage无法发起权限申请

Android 13下Permission Handler申请存储权限不弹弹窗的解决方案

问题原因

Android 13(API 33)重构了存储权限体系,原有的WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE权限不再适用于该版本及以上系统,直接调用Permission.storage.request()会被系统判定为无效请求,从而直接跳转至应用设置页面,而非弹出权限申请弹窗。

解决步骤

  1. 更新AndroidManifest.xml权限配置
    针对不同版本的Android系统配置对应权限,低版本保留原有权限并限定生效范围,Android 13及以上添加新的媒体权限:

    <!-- 仅对Android 12及以下生效的传统存储权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    
    <!-- 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" />
    
  2. 调整Flutter端权限请求逻辑
    根据Android系统版本动态选择要请求的权限,避免在Android 13+环境下请求已废弃的Permission.storage:

    import 'package:permission_handler/permission_handler.dart';
    import 'package:device_info_plus/device_info_plus.dart';
    
    Future<void> requestMediaPermissions() async {
      final androidInfo = await DeviceInfoPlugin().androidInfo;
      final isAndroid13Plus = androidInfo.version.sdkInt >= 33;
    
      Permission targetPermission;
      if (isAndroid13Plus) {
        // 根据业务场景选择对应权限:图片用Permission.photos,视频用Permission.videos,音频用Permission.audio
        targetPermission = Permission.photos;
      } else {
        targetPermission = Permission.storage;
      }
    
      final permissionStatus = await targetPermission.request();
      switch (permissionStatus) {
        case PermissionStatus.granted:
          // 权限已授予,执行后续存储操作
          break;
        case PermissionStatus.denied:
          // 提示用户权限被拒绝,可再次请求
          break;
        case PermissionStatus.permanentlyDenied:
          // 权限被永久拒绝,引导用户前往设置页面开启
          await openAppSettings();
          break;
        default:
          break;
      }
    }
    
  3. 额外注意事项

    • 确保permission_handler包版本不低于v10.0.0,新版本已适配Android 13的权限模型;
    • Android 13中写入媒体文件无需单独申请权限,使用MediaStore API向公共媒体库写入或向应用专属目录写入时,系统会自动授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:01:14