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

Flutter使用image_picker调用相机时应用崩溃 图库选取功能正常

问题排查步骤
  • 检查双端相机相关权限配置是否完整,调用相机需要单独配置权限和适配项,图库选取无需相机相关配置,所以会出现图库正常、相机崩溃的差异
  • 检查调用相机前是否完成了动态权限申请,未申请权限直接调用相机大概率会触发系统强制闪退
  • 确认崩溃场景:debug模式和release模式是否都出现崩溃,如果仅debug模式出现,可先打release包验证是否为调试连接的偶发问题
  • 检查安卓端Activity横竖屏配置是否正确,调用相机时横竖屏切换如果没有对应配置,会触发Activity重建导致连接断开
  • 检查设备自定义ROM权限限制,部分小米、华为等定制系统会默认拦截相机权限,就算动态申请也会返回拒绝
解决方案

安卓端配置

  1. 打开android/app/src/main/AndroidManifest.xml,添加相机权限:
<!-- 相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />
  1. 同文件内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>
  1. 新建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>
  1. 打开android/app/build.gradle,将compileSdkVersion调整为33及以上,适配高版本安卓权限规则。
  2. 给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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:24:04