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

Android端Flutter拍照卡顿:CameraCaptureCallback STATE_WAITING_FOCUS聚焦超时

问题:更新Flutter及依赖后Android端拍照极慢

此前运行正常,更新Flutter及依赖库后,Android端拍照变得极慢。当前使用camera 0.10.5+2版本(回退到旧版本也存在相同问题)。

代码示例

void initState() {
  super.initState();
  _cameraController = CameraController(widget.camera, ResolutionPreset.medium, enableAudio: false,);
  _cameraController.setFocusMode(FocusMode.locked);
  _cameraController.setFlashMode(FlashMode.off);
  _initializeControllerFuture = _cameraController.initialize();
}

Future<void> takePhoto({bool? oneShot}) async {
    await _initializeControllerFuture;
     XFile photo = await _cameraController.takePicture();
}

日志信息

日志中重复出现50次以下内容,随后提示聚焦超时才继续完成拍照流程:

D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_WAITING_FOCUS | afState: 2 | aeState: 2

完整日志:

D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_WAITING_FOCUS | afState: 2 | aeState: 2
W/CameraCaptureCallback( 5282): Focus timeout, moving on with capture
I/Camera  ( 5282): captureStillPicture
D/Camera  ( 5282): Updating builder with feature: ExposureLockFeature
D/Camera  ( 5282): Updating builder with feature: ExposurePointFeature
D/Camera  ( 5282): Updating builder with feature: ZoomLevelFeature
D/Camera  ( 5282): Updating builder with feature: AutoFocusFeature
D/Camera  ( 5282): Updating builder with feature: NoiseReductionFeature
I/Camera  ( 5282): updateNoiseReduction | currentSetting: fast
D/Camera  ( 5282): Updating builder with feature: FocusPointFeature
D/Camera  ( 5282): Updating builder with feature: ResolutionFeature
D/Camera  ( 5282): Updating builder with feature: SensorOrientationFeature
D/Camera  ( 5282): Updating builder with feature: FlashFeature
D/Camera  ( 5282): Updating builder with feature: ExposureOffsetFeature
D/Camera  ( 5282): Updating builder with feature: FpsRangeFeature
I/Camera  ( 5282): sending capture request
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
I/Camera  ( 5282): unlockAutoFocus
I/Camera  ( 5282): refreshPreviewCaptureSession
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
D/CameraCaptureCallback( 5282): CameraCaptureCallback | state: STATE_CAPTURING | afState: 2 | aeState: 2
I/Camera  ( 5282): onImageAvailable

分析与解决方案

从日志能明确看出,拍照慢的核心原因是聚焦超时——相机一直等待聚焦完成,直到超时后才强制执行拍照。结合你的代码,问题可能出在以下几点:

  1. 聚焦模式设置时机错误:你在控制器初始化前就调用setFocusMode,此时相机未完成初始化,聚焦锁定并未生效。需在初始化完成后再设置聚焦参数。
  2. 聚焦模式适配问题:FocusMode.locked依赖初始聚焦结果,若场景无明显纹理、光线昏暗,初始聚焦失败就会触发超时。可尝试切换聚焦模式或提前触发聚焦。

修改后的代码示例:

void initState() {
  super.initState();
  _cameraController = CameraController(widget.camera, ResolutionPreset.medium, enableAudio: false,);
  _initializeControllerFuture = _cameraController.initialize().then((_) {
    // 初始化完成后再配置相机参数
    _cameraController.setFocusMode(FocusMode.locked);
    _cameraController.setFlashMode(FlashMode.off);
  });
}

Future<void> takePhoto({bool? oneShot}) async {
  await _initializeControllerFuture;
  // 提前触发聚焦,确保完成后再拍照
  await _cameraController.focus();
  XFile photo = await _cameraController.takePicture();
}

额外优化建议:

  • 降低分辨率预设,比如改为ResolutionPreset.low,减少相机处理负载;
  • 检查AndroidManifest.xml是否正确配置相机权限,以及是否开启硬件加速;
  • 测试不同Android机型,排查是否为特定机型兼容性问题;
  • 更新camera库至最新稳定版,确认是否存在框架兼容修复(即便旧版本有问题,新版本可能解决了Flutter更新后的适配问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:16:05