这是我参与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 : 用于指定调用该回调的线程。