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

Flutter Android端使用ImagePicker调用真机相机触发Lost connection to device错误如何解决

ImagePicker 调用崩溃断开连接问题解决

问题根因

你遇到的Lost connection to device报错本质是应用触发崩溃被系统杀死,常见原因包括:

  • 未申请安卓相机/存储权限,调用相机后触发权限错误崩溃
  • 代码未处理空安全,用户取消拍照时pickedFile为null,强制用!解包触发空指针崩溃
  • 拍照未做压缩,高分辨率原图占内存过高触发OOM崩溃
  • 系统开发者选项开启了「不保留活动」,启动相机后原Activity被销毁
  • image_picker插件版本过低存在安卓适配bug

ImagePicker 正确使用方式

1. 前置配置(安卓端)

在android/app/src/main/AndroidManifest.xml中添加以下配置:

<!-- 相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 安卓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" />

<application
    ...
    <!-- 适配安卓10以上分区存储 -->
    android:requestLegacyExternalStorage="true"
    ...>

建议配合permission_handler插件在调用相机前主动申请权限,确认用户授权后再启动相机

2. 修正后的代码实现

import 'package:flutter/material.dart';
import 'dart:io';
import 'package:image_picker/image_picker.dart';

class FormTree extends StatefulWidget {
  const FormTree({Key? key}) : super(key: key);

  @override
  _FormTreeState createState() => _FormTreeState();
}

class _FormTreeState extends State<FormTree> {
  File? image;
  // 全局复用ImagePicker实例
  final ImagePicker _imagePicker = ImagePicker();

  Future pickImage() async {
    // 可在此处插入权限申请逻辑
    final XFile? pickedFile = await _imagePicker.pickImage(
      source: ImageSource.camera,
      // 添加压缩参数,避免原图过大导致OOM
      imageQuality: 60,
      maxWidth: 1080,
      maxHeight: 1920,
    );
    // 非空判断后再处理,避免空指针崩溃
    if (pickedFile != null) {
      setState(() {
        image = File(pickedFile.path);
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("拍照示例")),
      body: Container(
        child: ElevatedButton.icon(
          icon: const Icon(Icons.camera_alt_rounded),
          onPressed: pickImage,
          label: const Text("拍照"),
          // style: elevatedFormButton,
        ),
      ),
    );
  }
}

断连问题排查步骤

  • 关闭设备开发者选项中的「不保留活动」「后台进程限制」等调试开关
  • 将image_picker插件升级到最新稳定版
  • 若仍有崩溃,使用adb logcat抓取安卓原生日志,定位具体崩溃原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:08