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

Flutter应用在Android 13及以上使用image_picker选图时崩溃求助

解决Android 13+使用image_picker选图崩溃问题

1. 修正权限配置

Android 13及以上对媒体权限做了拆分,旧的READ_EXTERNAL_STORAGE不再适用,需在android/app/src/main/AndroidManifest.xml中添加适配权限:

<!-- Android 13+ 图片权限 -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<!-- 兼容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" />

若需选择视频,额外添加READ_MEDIA_VIDEO权限。

2. 升级image_picker插件

旧版本插件未适配Android 13的系统规则,建议更新到最新稳定版。修改pubspec.yaml:

dependencies:
  image_picker: ^1.0.4 # 替换为当前最新版本

执行flutter pub get完成依赖更新。

3. 完善运行时权限申请逻辑

调用图片选择器前,必须确保已获取对应权限,可借助permission_handler插件实现:

import 'package:permission_handler/permission_handler.dart';
import 'package:image_picker/image_picker.dart';

Future<void> pickImage() async {
  if (await Permission.photos.request().isGranted) {
    final XFile? image = await ImagePicker().pickImage(source: ImageSource.gallery);
    // 处理选中的图片
  } else {
    // 提示用户开启权限
  }
}

4. 排查调试环境问题

"Lost Device Connection"有时和调试环境相关:

  • 重启设备和电脑,重新插拔USB数据线
  • 确认设备开发者选项中,USB调试、文件传输模式已开启
  • 优先用真机测试,部分Android 13模拟器对媒体权限支持存在bug

5. 获取详细崩溃日志

若以上方法无效,需通过日志定位根源:

  • 在Android Studio的Logcat中过滤FATAL EXCEPTION,查看崩溃堆栈
  • 用adb logcat命令在终端捕捉实时日志,获取崩溃瞬间的详细错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:12:09