这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
一、 CameraDevice
CameraDevice 是一个连接的相机设备代表,可以理解成连接到安卓设备的单个相机的抽象表示,相当于旧的API中的 Camera 类。
1、获取实例的方法
可以通过 CameraManaer 的 openCamera() 打开相机,在 CameraDevice.StateCallback 的 onOpened(CameraDevice camera) 方法中可获得 CameraDevice 的实例。
2、内部类
CameraDevice.StateCallback() 相机状态改变时调用这个回调方法,相机有以下四个状态可以实现,我们获取CameraDevice 的实例就是在下面的状态回调中获取的。
private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull CameraDevice camera) {
mCameraDevice = camera; // 获取到可用的 CameraDevice 实例
// 当相机成功打开时回调该方法,接下来可以执行创建预览的操作
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
// 当相机断开连接时回调该方法,应该在此执行释放相机的操作
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
// 当相机打开失败时,应该在此执行释放相机的操作
}
@Override
public void onClosed(@NonNull CameraDevice camera) {
// 当相机关闭时回调该方法,这个方法可以不用实现
}
};
3、常用的方法
1、close()
关闭掉对应的相机设备,
2、 CaptureRequest.Builder createCaptureRequest(int templateType)
使用指定模板创建一个 CaptureRequest.Builder 用于新的捕获请求构建。
CaptureRequest.Builder createCaptureRequest( TEMPLATE_PREVIEW ) // 预览请求 CaptureRequest.Builder createCaptureRequest( TEMPLATE_STILL_CAPTURE ) // 拍照请求
3、 void createCaptureSession(List outputs, CameraCaptureSession.StateCallback callback, Handler handler)
使用一个指定的 Surface 输出列表创建一个相机捕捉会话。 outputs : 输出的surface的集合。 callback : 重复请求,实现预览界面的回调方法。 handler : 执行callback的工作线程。
上图中的callback方法为null,是调用自身回调方法。
4. String getId()
获取当前设备的ID,比如前置摄像头和后者摄像头。