Android Camera2 API简述 (一)

1,083 阅读2分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

一、 CameraDevice

CameraDevice 是一个连接的相机设备代表,可以理解成连接到安卓设备的单个相机的抽象表示,相当于旧的API中的 Camera 类。

1、获取实例的方法

可以通过 CameraManaeropenCamera() 打开相机,在 CameraDevice.StateCallback 的 onOpened(CameraDevice camera) 方法中可获得 CameraDevice 的实例。

image.png

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)

image.png

使用一个指定的 Surface 输出列表创建一个相机捕捉会话。 outputs : 输出的surface的集合。 callback : 重复请求,实现预览界面的回调方法。 handler : 执行callback的工作线程。

image.png 上图中的callback方法为null,是调用自身回调方法。

4. String getId()

获取当前设备的ID,比如前置摄像头和后者摄像头。