camera2的结构如下,主要是通过相机管理器(CameraManager)获得相机设备(CameraDevice),然后再开启一个控制相机的会话,最后发送 拍照、预览、录像等请求。
0 准备
1 新建工程,在一个Activity上
设置一个TextureView 用于 预览图片;
设置一个ImageView 用于 显示拍照结果;
设置一个 Button 用于触发拍照功能;
2 设置AndroidManifest.xml文件配置相机权限
<uses-permission
I 实现预览功能
1.先创建好一个预览的容器textureView
textureView
- 监听这个容器的状态,如果容器准备好了,就开启相机:
// 先准备一个监听器
- 启动相机时,要创建一系列的回调函数,所以应该从后向前写代码:
private
4 申请相机权限
private
II 实现拍照功能
这段代码都是在 Activity的onCreate里面写的。
- 准备ImageReader用于监听并接收相机拍摄的图片
//B1. 准备工作:初始化ImageReader
- 设置ImageReader的监听函数
//B2. 准备工作:设置ImageReader收到图片后的回调函数
- 保存ImageReader的Surface
//B3 配置:获取ImageReader的Surface
- 设置相机的点击事件
//B4. 相机点击事件
- 最后要记得在之前配置的session会话里面绑定,当前这个输出对象imageReaderSurface:
private
这段功能的整体代码为:
@Override
III 相机的声明周期管理
1. 当activity不处于交互状态时释放相机
@Override
2 当活动再次可以交互时开启相机
@Override
IV 预览和功能的完整代码为:
文件名 Camera2ApiActivity.java
package