打开相机预览时开启闪光灯

3

我有一个标准的开关手电筒的代码:

    @RequiresApi(Build.VERSION_CODES.M)
    private fun flashlightOff() {
        val cameraManager: CameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
        val cameraId = cameraManager.cameraIdList[0]
        cameraManager.setTorchMode(cameraId, false)
    }

    @RequiresApi(Build.VERSION_CODES.M)
    private fun flashlightOn() {
        val cameraManager: CameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
        val cameraId = cameraManager.cameraIdList[0]
        cameraManager.setTorchMode(cameraId, true)
    }

然而,如果我在相机预览中使用它(即<androidx.camera.view.PreviewView),这个逻辑就会失败。是否有一种方法可以在使用相机时覆盖闪光灯,或者完全不使用上述逻辑?下面是我用来启动相机预览的代码:
    private fun startCamera() {
    val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    cameraProviderFuture.addListener(Runnable {
        // Used to bind the lifecycle of cameras to the lifecycle owner
        val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

        // Preview
        val preview = Preview.Builder()
                .build()
                .also {
                    it.setSurfaceProvider(viewFinder.createSurfaceProvider())
                }

        imageCapture = ImageCapture.Builder().build()

        // Select back camera as a default
        val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

        try {
            // Unbind use cases before rebinding
            cameraProvider.unbindAll()

            // Bind use cases to camera
            camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture)
            camera!!.cameraControl.setLinearZoom(.50F)
        } catch (exc: Exception) {
            Log.e(TAG, "Use case binding failed", exc)
        }

    }, ContextCompat.getMainExecutor(this))
}
1个回答

3

我找到了一个解决方案,可以在使用androidx.camera.view.PreviewView时启用手电筒。

@RequiresApi(Build.VERSION_CODES.M)
private fun flashlightOff() {
    camera.cameraControl.enableTorch(false)
}

@RequiresApi(Build.VERSION_CODES.M)
private fun flashlightOn() {
    camera.cameraControl.enableTorch(true)
}

在初始化相机后,确保添加 camera.cameraInfo.hasFlashUnit()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接