Flutter使用image_picker调用相机时应用崩溃 图库选取功能正常
问题排查步骤
- 检查双端相机相关权限配置是否完整,调用相机需要单独配置权限和适配项,图库选取无需相机相关配置,所以会出现图库正常、相机崩溃的差异
- 检查调用相机前是否完成了动态权限申请,未申请权限直接调用相机大概率会触发系统强制闪退
- 确认崩溃场景:debug模式和release模式是否都出现崩溃,如果仅debug模式出现,可先打release包验证是否为调试连接的偶发问题
- 检查安卓端Activity横竖屏配置是否正确,调用相机时横竖屏切换如果没有对应配置,会触发Activity重建导致连接断开
- 检查设备自定义ROM权限限制,部分小米、华为等定制系统会默认拦截相机权限,就算动态申请也会返回拒绝
解决方案
安卓端配置
- 打开
android/app/src/main/AndroidManifest.xml,添加相机权限:
<!-- 相机权限 --> <uses-permission android:name="android.permission.CAMERA" />
- 同文件内application标签下添加FileProvider配置,相机拍照返回的临时文件需要通过FileProvider访问:
<provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
- 新建
android/app/src/main/res/xml/file_paths.xml文件,写入以下内容:
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external_files" path="."/> </paths>
- 打开
android/app/build.gradle,将compileSdkVersion调整为33及以上,适配高版本安卓权限规则。 - 给MainActivity添加横竖屏切换适配,避免相机调用时页面重建崩溃:在AndroidManifest的MainActivity标签中添加以下属性:
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
iOS端配置
打开ios/Runner/Info.plist,添加相机使用说明配置:
<key>NSCameraUsageDescription</key> <string>需要访问您的相机拍摄照片设置头像</string>
通用代码调整
调用相机前必须先申请相机权限,示例代码如下:
import 'package:permission_handler/permission_handler.dart'; import 'package:image_picker/image_picker.dart'; // 调用相机逻辑 Future<void> takeAvatarPhoto() async { // 先申请相机权限 PermissionStatus cameraStatus = await Permission.camera.request(); if (!cameraStatus.isGranted) { // 权限被拒绝,提示用户手动开启 return; } // 权限通过后调用相机,同时添加压缩参数避免大图导致的内存崩溃 final XFile? image = await ImagePicker().pickImage( source: ImageSource.camera, maxHeight: 500, maxWidth: 500, imageQuality: 70, ); // 后续处理返回的图片 }
如果以上配置全部完成后仍有崩溃,可以将image_picker升级到最新的0.8.x稳定版重试。
内容的提问来源于stack exchange,提问作者Vedha
相关产品推荐
相关产品推荐

