zxing是一套处理而外围码的开源库,由google维护。附带有android的客户端。为了移植到我们自己的程序上,大概看了一下原理。简记如下。

以下行为,大体按照时间顺序。

  1. onResume的时候初始化Surface并设置回调。当SurfaceView初始化好了,SurfaceView#getHolder,用于初始化相机并与相机绑定。

  2. initCamera 最终调用的是Camera(这是android第一套相机接口,目前已经全面更换为Camera2,所以是被@Deprecated的) 调用的关键是Camera.open(int) int代表调用哪个摄像头(一般兰说一个前一个后)。

  3. Surface上的展示。在initCamera的时候,把SurfaceHolder也传给了Camera实例,Camera实例会自己在上面画画的。

  4. 处理图片。同时Camera类还提供了PreviewCallback接口,用来获得byte[] data类型的数据。这个Callback绑定的时候,就规定了传回来会传到DecodeThread对应的Handler。

  5. 在Decode Handler中,能够把得到的图片decode出来,结果发送给CaptureActivityHandler处理。