我可以在 Android Camera2 API 中同时使用相机预览和手电筒吗?
当我尝试使用CameraManager.setTorchMode(String cameraId, boolean enabled)
它时,当相机未打开时它工作正常。但是当相机打开时,我尝试setTorchMode
收到此异常:
CameraService: setTorchMode: 相机 0 的手电筒模式不可用,因为相机正在使用中
我可以在 Android Camera2 API 中同时使用相机预览和手电筒吗?
当我尝试使用CameraManager.setTorchMode(String cameraId, boolean enabled)
它时,当相机未打开时它工作正常。但是当相机打开时,我尝试setTorchMode
收到此异常:
CameraService: setTorchMode: 相机 0 的手电筒模式不可用,因为相机正在使用中
同时设置 FLASH_MODE 和 AE_MODE 很重要。以下是工作代码:
public void toggleFlashMode(boolean enable){
try {
if (mCameraType.equals(CameraType.BACK)) {
if (enable) {
mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_TORCH);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
} else {
mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
}
mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, null);
}
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
该错误表明有问题的相机已在使用中。
您需要相应地设置FLASH_MODE
and CONTROL_AE_MODE
。
mPreviewRequestBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
// Then Send request to current camera session
mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, null);
不,它们是相互排斥的。
相机设备需要在相机打开时对闪光灯进行独家控制,以确保它可以根据需要进行拍照等。
如果您想在相机打开时打开手电筒,请使用相机 API 的闪光模式设置。对于新的 camera2 API,将自动曝光模式设置为 ON ( CONTROL_AE_MODE_ON ) 并将闪光灯模式设置为 TORCH ( FLASH_MODE_TORCH )。对于旧的相机 API,那就是Parameters.setFlashMode。
我找到了解决方案:
CaptureRequest.Builder builder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.set(CaptureRequest.FLASH_MODE, enable ? CameraMetadata.FLASH_MODE_TORCH : CameraMetadata.FLASH_MODE_OFF);
CaptureRequest request = builder.build();
cameraCaptureSession.capture(request, null, null);