Flutter安卓真机使用image_picker打开图库为何提示Lost device connection?
Flutter安卓真机使用image_picker跳转图库页面闪退解决方案
故障表现
调用ImageSource.gallery打开图库时,「最近照片」页面可正常选择图片,切换到完整图库页面后直接弹出Lost device connection提示,随后应用白屏。
现有实现代码:
_processImage(ImageSource image) async { final ImagePicker picker = ImagePicker(); file = await picker.pickImage(source: image); setState(() {}); }
修复方案
- 适配安卓各版本存储权限声明
在项目android/app/src/main/AndroidManifest.xml文件中添加对应权限:<!-- 安卓13及以上系统图片权限 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!-- 安卓12及以下系统存储权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> - 调用选图逻辑前先完成权限校验
搭配permission_handler库提前请求权限,避免触发系统权限拦截导致崩溃,修改后代码参考:import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:permission_handler/permission_handler.dart'; _processImage(ImageSource image) async { // 安卓端先校验权限 if (Platform.isAndroid) { final androidInfo = await DeviceInfoPlugin().androidInfo; PermissionStatus status; if (androidInfo.version.sdkInt >= 33) { status = await Permission.photos.request(); } else { status = await Permission.storage.request(); } if (!status.isGranted) { // 可自行补充权限拒绝的提示逻辑 return; } } final ImagePicker picker = ImagePicker(); // 增加图片参数限制,避免大图加载引发内存崩溃 file = await picker.pickImage( source: image, maxWidth: 1080, maxHeight: 1920, imageQuality: 85 ); if (file != null) { setState(() {}); } } - 升级image_picker到最新稳定版,避免库本身的兼容性缺陷
执行命令更新依赖:flutter pub upgrade image_picker - 若仍未修复,可开启安卓端日志过滤,搜索
AndroidRuntime关键字查看原生崩溃栈,定位具体异常原因。
内容的提问来源于stack exchange,提问作者devblock
相关产品推荐
相关产品推荐

