最近在优化扫码功能,对Zxing提供的demo做了一个梳理,下面时序图看不清楚的可以下载下来看,本来想精简下的,发现精简后流程就不清晰了。
扫码大致流程:应用扫码activity启动------->启动摄像头——>获得bitmap照片----->对得到的照片做编码解析----->获得对应的信息做处理。
<pre name="code" class="html">启动流程如下:
CaptureActivity启动整个流程就5个步骤,都在CaptureActivity的onresume中,具体内容如下:
1.生成cameraManager对象。
cameraManager = new CameraManager(getApplication())。
进去看构造方法做了什么事
public CameraManager(Context context) {
this.context = context;
this.configManager = new CameraConfigurationManager(context);
previewCallback = new PreviewCallback(configManager);
}
生成2个实例CameraConfigurationManager PreviewCallback,分别用做camera参数配置和camera预览数据回调
所谓camera预览数据回调就是Camera抓取到数据后回调此对象回传数据给调用方
2.实例化扫码UI控件
viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);
viewfinderView.setCameraManager(cameraManager);
获得CameraManager实例,设置CameraManager实例到viewfinderView,为UI展示提供尺寸。
viewfinderView是一个自定义view,在ondraw中根据CameraManager中CameraConfigurationManager的配置参数来绘制UI
为后面UI绘制做准备。
3.打开摄像头
cameraManager.openDriver(surfaceHolder);
进去看具体做了什么
public synchronized void openDriver(SurfaceHolder holder) throws IOException {
.....
if (theCamera == null) {
theCamera = OpenCameraInterface.open(requestedCameraId);//打开指定id的摄像头
if (th