-
通过getSystemService()方法获取系统服务CameraManager
-
再通过系统服务CameraManager的openCamera方法打开设备
在使用openCamera方法时需要传入CameraDevice.StateCallback接口,这个接口用来监听CameraDevice的状态。
CameraDevice.StateCallback接口有三个主要方法需要实现:
override fun onOpened(cameraDevice: CameraDevice)
override fun onDisconnected(cameraDevice: CameraDevice)
override fun onError(cameraDevice: CameraDevice, error: Int)
重点在onOpen方法。onOpen方法中获取到CameraDevice对象不为空,则表示CameraDevice设备可以开始会话了。
-
在onOpened方法中
准备创建请求
,通过CameraDevice.createCaptureRequest(templateType: Int)方法 获取到CaptureRequest.Builder对象,其中templateType参数有以下选项:
CameraDevice.TEMPLATE_PREVIEW
CameraDevice.TEMPLATE_RECORD
CameraDevice.TEMPLATE_STILL_CAPTURE
CameraDevice.TEMPLATE_VIDEO_SNAPSHOT
CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG
CameraDevice.TEMPLATE_MANUAL
预览使用
CameraDevice.TEMPLATE_PREVIEW
视频录制
CameraDevice.TEMPLATE_RECORD
拍照使用
CameraDevice.TEMPLATE_STILL_CAPTURE
手动设置
CameraDevice.TEMPLATE_MANUAL
传入不同的模版参数,系统会自动位CameraDevice设置部分参数,TEMPLATE_MANUAL表示全手动设置
-
在onOpened方法中创建会话, 通过CameraDevice.createCaptureSession创建会话,此方法需要传入CameraCaptureSession.StateCallback接口,此接口用来监听会话状态。
CameraCaptureSession.StateCallback接口需要实现两个方法:
override fun onConfigured(session: CameraCaptureSession?)
override fun onConfigureFailed(session: CameraCaptureSession?)
重点在onConfigured方法。onConfigured中的session参数不会空,则表示会话创建成功,可以开始发送请求。
-
在onConfigured方法中
创建请求
,通过步骤3中的CaptureRequest.Builder对象的build()方法创建请求CameraRequest,最后通过CameraCaptureSession.setRepeatingRequest()方法发送请求