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

CameraX开发:如何避免拍照后自动关闭闪光灯(Torch)

解决拍照后闪光灯自动关闭的问题

方案一:拍照成功后重新开启闪光灯

直接在拍照成功的回调中重新调用闪光灯开启方法,覆盖系统自动关闭的行为:

private fun takePhoto() {
    val imageCapture = imageCapture ?: return

    imageCapture.takePicture(cameraExecutor, object : ImageCapture.OnImageCapturedCallback() {
        override fun onCaptureSuccess(image: ImageProxy) {
            super.onCaptureSuccess(image)
            // 拍照完成后立即重新开启闪光灯
            openFlash()
            // 图片处理逻辑
        }

        override fun onError(exception: ImageCaptureException) {
            super.onError(exception)
            Log.e(TAG, "拍照失败", exception)
        }
    })
}

这个方法实现简单,但可能会出现短暂的闪光灯闪烁(系统先关闭再重启)。

方案二:配置CaptureRequest强制闪光灯常亮

通过设置ImageCapture的拍照请求参数,让系统在拍照时保持闪光灯常亮状态,彻底避免自动关闭的情况:

修改bindCameraUseCases中创建imageCapture的代码,添加闪光灯模式配置:

imageCapture = ImageCapture.Builder()
    .setTargetRotation(rotation)
    .setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY)
    // 强制拍照时使用闪光灯常亮模式
    .setCaptureRequestOption(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH)
    .build()

搭配你原本的openFlash()初始调用,相机启动后闪光灯保持常亮,拍照过程中不会被系统自动关闭,体验更平滑。

注意事项

  • 确保已申请CAMERA权限,你的代码中已包含权限申请逻辑,无需额外修改。
  • 方案二在部分老旧机型上可能存在兼容性问题,建议覆盖主流机型测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:55:27