CameraManager in Android
private CameraManager cameraManager;
private String cameraId;
private CameraDevice cameraDevice;
private CameraCaptureSession captureSession;
private CaptureRequest.Builder previewRequestBuilder;
private void setUpCameraPreview() {
cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String[] cameraIds = cameraManager.getCameraIdList();
for (String id : cameraIds) {
CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(id);
Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
if (facing != null && facing == CameraCharacteristics.LENS_FACING_BACK) {
cameraId = id;
break;
}
}
if (cameraId == null) {
cameraId = cameraIds[0];
}
CameraDevice.StateCallback stateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
cameraDevice = camera;
SurfaceTexture surfaceTexture = previewSurface.getSurfaceTexture();
surfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
Surface previewSurface = new Surface(surfaceTexture);
try {
previewRequestBuilder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewRequestBuilder.addTarget(previewSurface);
List<Surface> targets = Arrays.asList(previewSurface, imageReader.getSurface());
camera.createCaptureSession(targets, new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
captureSession = session;
previewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_AUTO);
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
previewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range<>(30, 30));
previewRequestBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, CaptureRequest.CONTROL_SCENE_MODE_ACTION);
CaptureRequest previewRequest = previewRequestBuilder.build();
captureSession.setRepeatingRequest(previewRequest, null, null);
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
// Handle configuration failures
}
}, null);
} catch (CameraAccessException e) {
// Handle camera access exceptions
}
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
// Handle camera disconnect event
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
// Handle camera errors
}
};
cameraManager.openCamera(cameraId, stateCallback, null);
} catch (CameraAccessException e) {
// Handle camera access exceptions
} catch (SecurityException e) {
// Handle camera security exceptions
}
}