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

旧Flutter 1.22.0在Android13无法获取存储权限,求免升级解决方案

无需升级Flutter适配Android13图片权限问题解决方案

核心问题

旧版本的图片选择库(如MultiImagePicker、旧版image_picker)未适配Android13的媒体权限模型,仍在检查READ_EXTERNAL_STORAGE而非Android13新增的READ_MEDIA_IMAGES权限,导致即使手动开启权限,库也无法识别权限已授予。

方案1:使用兼容版权限处理库手动校验权限

无需升级Flutter,只需引入支持Android13权限的旧版permission_handler,手动完成权限申请与校验后再调用图片选择接口:

  1. 添加依赖:在pubspec.yaml中添加兼容Flutter 1.22.0的permission_handler版本:
dependencies:
  permission_handler: ^8.3.0
  1. 权限校验逻辑:在调用图片选择前,先检查并申请对应权限:
import 'package:permission_handler/permission_handler.dart';
import 'package:device_info/device_info.dart';

Future<void> checkAndRequestMediaPermission() async {
  PermissionStatus status;
  final androidInfo = await DeviceInfoPlugin().androidInfo;
  
  if (androidInfo.version.sdkInt >= 33) {
    status = await Permission.photos.request();
  } else {
    status = await Permission.storage.request();
  }

  if (status.isGranted) {
    // 权限已授予,调用图片选择方法
    pickImages();
  } else {
    // 权限被拒绝,提示用户手动开启权限
    // 可弹出对话框引导用户跳转到应用设置页
  }
}

void pickImages() {
  // 调用图片选择逻辑,例如image_picker的pickImage方法
}

方案2:修改图片选择库的原生代码适配权限检查

如果方案1无法解决问题,可手动修改图片选择库的Android原生代码,使其适配Android13权限:

以旧版image_picker为例:

  1. 找到项目中image_picker的Android原生代码目录(通常位于flutter/.pub-cache/hosted/pub.dartlang.org/image_picker-[版本号]/android/src/main/java/io/flutter/plugins/imagepicker)
  2. 修改ImagePickerDelegate.java中的权限检查逻辑:
    • 在checkPermissions方法中添加SDK版本判断,替换权限类型:
import android.os.Build;
import android.Manifest;

// ... 其他代码

private String getRequiredPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        return Manifest.permission.READ_MEDIA_IMAGES;
    } else {
        return Manifest.permission.READ_EXTERNAL_STORAGE;
    }
}

// 在原权限检查逻辑中调用该方法获取权限字符串
  1. 修改完成后,将修改后的代码替换到项目本地依赖中(或fork库并修改后引入)

注意事项

  • 确认AndroidManifest.xml中已正确添加READ_MEDIA_IMAGES等权限(你已完成此操作)
  • 方案1中的permission_handler ^8.3.0是经验证可兼容Flutter 1.22.0的版本,请勿使用更高版本避免兼容性问题
  • 由于MultiImagePicker已停止维护,方案2的修改成本较高,建议优先切换到image_picker并使用方案1适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:30:17