public final class CameraManager
extends Object
java.lang.Object | |
↳ | android.hardware.camera2.CameraManager |
一个系统服务管理器,用于检测,表征和连接到 CameraDevices
。
你可以通过调用 Context.getSystemService()
得到这个类的一个实例。
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
有关与相机设备通信的更多详细信息,请阅读相机开发者指南或 camera2
包装文档。
Nested classes |
|
---|---|
class |
CameraManager.AvailabilityCallback 相机设备的回调变为可用或无法打开。 |
class |
CameraManager.TorchCallback 相机闪光灯模式的回调变为不可用,禁用或启用。 |
Public methods |
|
---|---|
CameraCharacteristics |
getCameraCharacteristics(String cameraId) 查询摄像头设备的功能。 |
String[] |
getCameraIdList() 通过标识符返回当前连接的摄像头设备列表,包括其他摄像头API客户端可能正在使用的摄像头。 |
void |
openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler) 打开与给定ID的摄像机的连接。 |
void |
registerAvailabilityCallback(CameraManager.AvailabilityCallback callback, Handler handler) 注册回调以获得有关相机设备可用性的通知。 |
void |
registerTorchCallback(CameraManager.TorchCallback callback, Handler handler) 注册一个回叫以通知手电筒模式状态。 |
void |
setTorchMode(String cameraId, boolean enabled) 在不打开相机设备的情况下,设置给定ID的相机的闪光灯组件的手电筒模式。 |
void |
unregisterAvailabilityCallback(CameraManager.AvailabilityCallback callback) 删除以前添加的回调; 该回调将不再接收连接和断开回调。 |
void |
unregisterTorchCallback(CameraManager.TorchCallback callback) 删除以前添加的回调; 该回调将不再接收火炬模式状态回调。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
CameraCharacteristics getCameraCharacteristics (String cameraId)
查询摄像头设备的功能。 这些功能对于给定的相机是不可变的。
Parameters | |
---|---|
cameraId |
String : The id of the camera device to query |
Returns | |
---|---|
CameraCharacteristics |
The properties of the given camera |
Throws | |
---|---|
IllegalArgumentException |
if the cameraId does not match any known camera device. |
CameraAccessException |
if the camera device has been disconnected. |
String[] getCameraIdList ()
通过标识符返回当前连接的摄像头设备列表,包括其他摄像头API客户端可能正在使用的摄像头。
非可移动摄像机使用从0开始的整数作为其标识符,而可移动摄像机对每个设备都有唯一的标识符,即使它们是相同的型号。
Returns | |
---|---|
String[] |
The list of currently connected camera devices. |
Throws | |
---|---|
CameraAccessException |
void openCamera (String cameraId, CameraDevice.StateCallback callback, Handler handler)
打开与给定ID的摄像机的连接。
使用getCameraIdList()
获取可用摄像头设备的列表。 请注意,即使列出了某个标识,如果设备在与getCameraIdList()
和openCamera(String, CameraDevice.StateCallback, Handler)
的呼叫之间断开连接,或者优先级较高的相机API客户端开始使用相机设备,则打开可能会失败。
从API级别23开始,由于低优先级的背景摄像头API客户onCameraUnavailable(String)
在使用该设备而调用了onCameraUnavailable(String)
回调的设备仍可能通过在主叫摄像头API客户端具有较高优先级时调用此方法来打开优先于使用此设备的当前相机API客户端。 一般情况下,如果顶级前景活动在应用程序进程中运行,则访问摄像头时,您的进程将获得最高优先级,即使摄像头设备正在被其他摄像头API客户端使用,该方法也会成功。 以这种方式失去相机控制权的任何优先级较低的应用程序都将收到onDisconnected(CameraDevice)
回onDisconnected(CameraDevice)
。
一旦相机成功打开, onOpened(CameraDevice)
将与新开的CameraDevice
一起被调用。 摄像机设备可以通过拨打createCaptureSession(List
和createCaptureRequest(int)
如果相机变得调用这个函数返回后在初始化过程中断开, onDisconnected(CameraDevice)
与 CameraDevice
处于断开状态(和 onOpened(CameraDevice)
将被跳过)。
如果打开相机设备失败,则将调用设备回调的方法 onError
,并且相机设备上的后续调用将抛出 CameraAccessException
。
Parameters | |
---|---|
cameraId |
String : The unique identifier of the camera device to open |
callback |
CameraDevice.StateCallback : The callback which is invoked once the camera is opened |
handler |
Handler : The handler on which the callback should be invoked, or null to use the current thread's looper . |
Throws | |
---|---|
CameraAccessException |
if the camera is disabled by device policy, has been disconnected, or is being used by a higher-priority camera API client. |
IllegalArgumentException |
if cameraId or the callback was null, or the cameraId does not match any currently or previously available camera device. |
SecurityException |
if the application does not have permission to access the camera |
void registerAvailabilityCallback (CameraManager.AvailabilityCallback callback, Handler handler)
注册回调以获得有关相机设备可用性的通知。
再次注册相同的回调会将处理程序替换为提供的新处理程序。
第一次注册回叫时,会立即调用所有当前已知的相机设备的可用状态。
任何相机API客户端打开相机设备时,都会调用onCameraUnavailable(String)
。 从API级别23开始,其他相机API客户端仍然可以打开这样的相机设备,如果它们具有比相机设备的现有客户端更高的优先级,则驱逐现有客户端。 有关更多详细信息,请参阅open()。
由于此回调将在相机服务中注册,请记住在不再需要时取消注册; 否则回调将无限期地继续接收事件,并可能阻止其他资源被释放。 具体而言,回调将独立于一般活动生命周期并独立于各个CameraManager实例的状态而被调用。
Parameters | |
---|---|
callback |
CameraManager.AvailabilityCallback : the new callback to send camera availability notices to |
handler |
Handler : The handler on which the callback should be invoked, or null to use the current thread's looper . |
Throws | |
---|---|
IllegalArgumentException |
if the handler is null but the current thread has no looper. |
void registerTorchCallback (CameraManager.TorchCallback callback, Handler handler)
注册一个回叫以通知手电筒模式状态。
再次注册相同的回调会将处理程序替换为提供的新处理程序。
第一次注册回叫时,立即使用闪光灯单元的所有当前已知相机设备的手电筒模式状态调用该回叫。
由于此回调将在相机服务中注册,请记住在不再需要时取消注册; 否则回调将无限期地继续接收事件,并可能阻止其他资源被释放。 具体而言,回调将独立于一般活动生命周期并独立于各个CameraManager实例的状态而被调用。
Parameters | |
---|---|
callback |
CameraManager.TorchCallback : The new callback to send torch mode status to |
handler |
Handler : The handler on which the callback should be invoked, or null to use the current thread's looper . |
Throws | |
---|---|
IllegalArgumentException |
if the handler is null but the current thread has no looper. |
void setTorchMode (String cameraId, boolean enabled)
在不打开相机设备的情况下,设置给定ID的相机的闪光灯组件的手电筒模式。
使用getCameraIdList()
获取可用摄像机设备列表,并使用getCameraCharacteristics(String)
检查摄像机设备是否具有闪光灯组件。 请注意,即使相机设备具有闪光灯组件,如果开启手电筒模式所需的相机设备或其他相机资源正在使用中,打开手电筒模式可能会失败。
如果setTorchMode(String, boolean)
以成功打开或关闭火炬模式,则将调用onTorchModeChanged(String, boolean)
。 但是,即使开启手电筒模式成功,应用程序也不具有闪光灯装置或相机设备的专有权。 当闪光灯所属的相机设备变得不可用或者其他相机资源不能使用时,手电筒模式将关闭并变为不可用(将调用onTorchModeUnavailable(String)
)。 另外,其他应用程序可以自由调用setTorchMode(String, boolean)
来关闭手电筒模式(将调用onTorchModeChanged(String, boolean)
)。 如果最新的打开手电筒模式的应用程序退出,手电筒模式将被关闭。
Parameters | |
---|---|
cameraId |
String : The unique identifier of the camera device that the flash unit belongs to. |
enabled |
boolean : The desired state of the torch mode for the target camera device. Set to true to turn on the torch mode. Set to false to turn off the torch mode. |
Throws | |
---|---|
CameraAccessException |
if it failed to access the flash unit. CAMERA_IN_USE will be thrown if the camera device is in use. MAX_CAMERAS_IN_USE will be thrown if other camera resources needed to turn on the torch mode are in use. CAMERA_DISCONNECTED will be thrown if camera service is not available. |
IllegalArgumentException |
if cameraId was null, cameraId doesn't match any currently or previously available camera device, or the camera device doesn't have a flash unit. |
void unregisterAvailabilityCallback (CameraManager.AvailabilityCallback callback)
删除以前添加的回调; 该回调将不再接收连接和断开回调。
删除未注册的回叫没有效果。
Parameters | |
---|---|
callback |
CameraManager.AvailabilityCallback : The callback to remove from the notification list |
void unregisterTorchCallback (CameraManager.TorchCallback callback)
删除以前添加的回调; 该回调将不再接收火炬模式状态回调。
删除未注册的回叫没有效果。
Parameters | |
---|---|
callback |
CameraManager.TorchCallback : The callback to remove from the notification list |