我有一个标准的开关手电筒的代码:
@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))
}