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

Flutter file_picker在Android API33/34返回null问题求助

问题原因及解决方案

核心原因

Android 13(API 33)及以上版本对媒体访问权限做了细分,废弃了原有的READ_EXTERNAL_STORAGE权限,替换为READ_MEDIA_IMAGES(图片访问)、READ_MEDIA_VIDEO(视频访问)、READ_MEDIA_AUDIO(音频访问)这类更精准的权限。你的代码在低版本正常是因为当时沿用旧权限体系,而高版本中未申请对应细分权限,导致file_picker无法正常获取媒体文件,被系统判定为用户取消操作。

解决方案

1. 配置AndroidManifest权限

在android/app/src/main/AndroidManifest.xml中添加对应媒体权限,同时兼容低版本:

<!-- 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" /> -->

<!-- 兼容Android 12及以下版本 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

2. 动态申请权限(推荐)

高版本系统要求运行时动态申请权限,可借助permission_handler插件实现:

  • 先在pubspec.yaml添加依赖:
dependencies:
  permission_handler: ^10.2.0
  • 调用file_picker前先申请权限:
import 'package:permission_handler/permission_handler.dart';

// 申请图片访问权限
final status = await Permission.photos.request();
if (status.isGranted) {
  // 权限通过,执行文件选择
  FilePickerResult? result = await FilePicker.platform.pickFiles(
    type: FileType.media,
    allowMultiple: false,
  );
  // 处理选择结果
} else {
  // 权限被拒,提示用户前往设置开启
}

3. 更新file_picker插件版本

确保使用适配Android 13+的最新版file_picker,在pubspec.yaml中更新:

dependencies:
  file_picker: ^5.3.0

验证

完成配置后重新编译应用,在API 33/34设备上测试图片选择功能,即可正常获取FilePickerResult,不再返回null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:45:58