下面是一个使用Android Camera2 API创建相机会话的示例代码:
// 创建一个CameraCaptureSession.StateCallback对象来处理会话状态的变化
CameraCaptureSession.StateCallback sessionCallback = new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
// 会话已经配置完成,可以开始进行拍照或预览操作
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
// 会话配置失败,处理错误情况
}
};
// 获取CameraDevice对象
CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String cameraId = cameraManager.getCameraIdList()[0]; // 获取第一个相机的ID
CameraDevice cameraDevice;
cameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
cameraDevice = camera;
// 创建一个用于预览/拍照的CaptureRequest.Builder对象
CaptureRequest.Builder previewRequestBuilder;
try {
previewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
// 将预览请求设置给SurfaceView或TextureView等预览视图
Surface previewSurface = previewView.getHolder().getSurface();
previewRequestBuilder.addTarget(previewSurface);
// 创建一个会话来处理预览请求
cameraDevice.createCaptureSession(Arrays.asList(previewSurface), sessionCallback, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
// 相机设备断开连接,处理断开连接情况
cameraDevice.close();
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
// 相机设备发生错误,处理错误情况
cameraDevice.close();
}
}, null);
上述代码中,我们首先获取CameraManager对象,然后使用cameraManager.openCamera()方法打开相机设备并获取CameraDevice对象。接下来,我们创建CaptureRequest.Builder对象,并将预览视图的Surface添加为目标。最后,我们使用cameraDevice.createCaptureSession()方法创建一个CameraCaptureSession会话来处理预览请求,并传入预览视图的Surface列表。
注意:上述示例代码仅涵盖了相机会话的创建逻辑,实际使用Camera2 API还需要处理其他的相机操作,例如拍照、切换摄像头等。