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
分析与解决方案
从日志能明确看出,拍照慢的核心原因是聚焦超时——相机一直等待聚焦完成,直到超时后才强制执行拍照。结合你的代码,问题可能出在以下几点:
- 聚焦模式设置时机错误:你在控制器初始化前就调用
setFocusMode,此时相机未完成初始化,聚焦锁定并未生效。需在初始化完成后再设置聚焦参数。 - 聚焦模式适配问题:
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é
相关产品推荐
相关产品推荐

