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
相关产品推荐
相关产品推荐

