Android Camera2 API简述 (二)

1,563 阅读2分钟

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

一、 CameraManager

CameraManager 是一个专门用于检测和打开相机以及获取相机设备特性的系统服务,它负责管理所有的 CameraManager 相机设备。
可以通过调用 Context.getSystemService(java.lang.String) 方法来获取一个系统服务,可以选择的参数有两个, 使用Context.CAMERA_SERVICE 或 CameraManager.class 都行,CameraManager 的实例:

// 方式一
CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
// 方式二
CameraManager manager = (CameraManager) context.getSystemService(CameraManager.class);

二、 内部类

CameraManager 包含两个公有内部类:

1. CameraManager.AvailabilityCallback

可用状态监听类,当一个相机设备的可用状态发生变化时,就会回调这个类的 onCameraAvailable(String cameraId)onCameraUnavailable(String cameraId) 方法。

2. CameraManager.TorchCallback

闪光灯状态监听类,当闪光灯模式发生改变时,就会回调这个类的 onTorchModeChanged(String cameraId, boolean enabled)onTorchModeUnavailable(String cameraId) 方法。

通过 setTorchMode(String cameraId, boolean enabled) 方法设置 Torch 模式。

三、公共方法

1. String[] getCameraIdList()

用于获取当前连接的所有相机设备的集合,这个 id 通常都是从 0 开始并依次递增的。

一般对于手机自带的相机来说,

后置摄像头一般为 “0”,常量值为 CameraCharacteristics.LENS_FACING_FRONT; 前置摄像头一般为 “1”,常量值为 CameraCharacteristics.LENS_FACING_BACK。

对于外置相机来说,他们会有一个自己单独的标识符。

2. CameraCharacteristics getCameraCharacteristics(String cameraId)

用于查询id为cameraId的相机设备所支持的功能。该方法会返回一个 CameraCharacteristics 类的对象,其中封装了相机设备固有的的所有功能属性。可以通过该对象,获取和设置相机的参数,如对焦方式、闪光灯设置等。

3. void openCamera(String cameraId,CameraDevice.StateCallback callback,Handler handler)

打开指定的相机设备,

  • CameraId : 需要打开的相机 id。

  • CameraDevice.StateCallback:

private final CameraDevice.StateCallback mStateCallback1 = new CameraDevice.StateCallback() {
    @Override
    public void onOpened(CameraDevice camera) {
        //当camera成功打开之后会回调该方法。
    }
    @Override
    public void onDisconnected(CameraDevice camera) {
        //当camera不再可用,或调用CameraManager.openCamera()打开相机失败时都会调用此方法.
    }
    @Override
    public void onError(CameraDevice camera, int error) {
        //当camera出错时会回调该方法
    }
    @Override
    public void onClosed(CameraDevice camera) {
        super.onClosed(camera);
        //当调用CameraDevice.close()关闭相机设备后会回调此方法。
    }
};
  • handler : 用于指定调用该回调的线程。