在 android camerax(相机 2)中禁用自动对焦

disable autofocus in android camerax (camera 2)

我在扫描条码的项目中,所以我想禁用自动对焦以提高性能。我尝试了很多方法,但它根本不起作用。谁能给我一些帮助?谢谢。

如果您真的想关闭自动对焦,您可以在 CameraX 上使用 Camera2CameraControl class 执行此操作。为此,您必须首先将所需的用例绑定到生成 Camera 对象的生命周期,然后您可以使用该相机对象获取 CameraControl 对象,然后使用它来实例化一个Camera2CameraControl 可以让您将对焦模式设置为 CameraMetadata.CONTROL_AF_MODE_OFF

    val camera : Camera = cameraProvider.bindToLifecycle(
                        this,
                        cameraSelector,
                        imagePreview,
                        imageCapture,
                        imageAnalysis
                    )
    
    val cameraControl : CameraControl = camera.cameraControl
    val camera2CameraControl : Camera2CameraControl = Camera2CameraControl.from(cameraControl)
    
    //Then you can set the focus mode you need like this
    val captureRequestOptions = CaptureRequestOptions.Builder()
                .setCaptureRequestOption(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF)
                .build()
            camera2CameraControl.captureRequestOptions = captureRequestOptions

这是在最新的 CameraX 的“1.0.0-rc03”版本上测试的。

我用

disableAutoCancel()

使用 cameraX 1.0.0。相机对焦一次然后保持锁定,自动对焦不会每隔 X 秒重新启动,所以像

    val autoFocusAction = FocusMeteringAction.Builder(
                    autoFocusPoint,
                    FocusMeteringAction.FLAG_AF or
                            FocusMeteringAction.FLAG_AE or
                            FocusMeteringAction.FLAG_AWB
                ).apply {
                            disableAutoCancel()      
                    }
                }.build()
    
myCameraControl!!.startFocusAndMetering(autoFocusAction)