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

Flutter使用image_picker调用相机拍照后应用重启问题如何解决

问题解决方案

核心原因

调用相机时应用会退到后台,Android系统为了给前台相机应用释放运行内存,会自动销毁低优先级的后台应用进程,回到应用时相当于冷启动,看起来就是自动重启。你已经配置了CAMERA权限,可直接排除权限配置错误问题。

分端解决步骤

Android端

  • 首先在android/app/src/main/AndroidManifest.xml的activity标签中添加配置,禁止系统在调用相机时销毁当前activity:
<activity
    ...
    android:hardwareAccelerated="true"
    android:requestLegacyExternalStorage="true"
    android:preserveLegacyExternalStorage="true"
    android:launchMode="singleTop">
  • 在android/app/build.gradle中将minSdkVersion调整到21及以上,旧版本image_picker在minSdk低于19时会存在大量兼容性问题。
  • 不要在启动相机的页面使用高资源消耗的渲染逻辑,比如大量未释放的图片缓存、高帧率动画,避免应用退到后台时被系统判定为高资源消耗进程优先回收。

iOS端

  • 在ios/Runner/Info.plist中补充相机和相册的完整权限描述,注意不要缺漏NSPhotoLibraryAddUsageDescription权限,即使你只用到拍照,低版本image_picker也会触发写入相册的逻辑,权限不全会导致系统杀进程:
<key>NSCameraUsageDescription</key>
<string>需要访问相机拍摄照片</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册选取照片</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要保存拍摄的照片到相册</string>
  • 打开Xcode,在Runner项目的Signing & Capabilities中,开启Background Modes,勾选Background fetch和Remote notifications,降低应用后台被回收的概率。

通用快速解决方案

如果暂时不想修改原生配置,可以直接将image_picker升级到^0.8.4+2版本,这个版本是Flutter 2.x兼容的稳定版本之一,修复了大量拍照重启的兼容性bug,不需要修改底层代码即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 19:06:08