这里介绍的是 CameraManager 、 CameraDevice 、 CaptureRequestSession 、CaptureRequest,先来看一下他们的关系:
1. CameraManager
CameraManager主要用于管理系统摄像头。
- Context.getSystemService(Context.CAMERA_SERVICE) 来完成初始化,
- 可以
getCameraIdList
获取所有可用和Camera设备的cameraId(唯一标识) - 可以通过这个Id
getCameraCharacteristics
得到Camera设备的详细数据,由 CameraCharacteristics类 存储 - 可以通过Cameraid 启动某个设备
openCamera
。
CameraManager manager = (CameraManager)context.getSystemService(Context.CAMERA_SERVICE);
public String[] getCameraIdList()
public CameraCharacteristics getCameraCharacteristics(@NonNull String cameraId)
public void openCamera(@NonNull String cameraId,
@NonNull final CameraDevice.StateCallback callback, @Nullable Handler handler)
2. CameraDevice
CameraDevice直接与系统摄像头相联系,相当一个抽象摄像头。
- 通过CameraDevice.StateCallback监听摄像头的状态(主要包括onOpened、onClosed、onDisconnected、onError四种状态)
- 创建 CaptureRequestSession 对象,来创建会话。
- 创建 CaptureRequest 对象 ,来创建捕获请求。
// 创建 CaptureRequestSession 对象
// 因为是异步操作,通过 CameraDevice.StateCallback 的 onOpened 方法返回。
public abstract void createCaptureSession(@NonNull List<Surface> outputs,
@NonNull CameraCaptureSession.StateCallback callback, @Nullable Handler handler)
public abstract CaptureRequest.Builder createCaptureRequest(@RequestTemplate int templateType)
当相机被成功开启的时候会