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
相关产品推荐
相关产品推荐

