实现流程
1. 创建 APP 扫码?面
在 xml ?面文件中写好 DecoratedBarcodeView 的信息,DecoratedBarcodeView 继承 FrameLayout 类,所以可以直接在 xml 文件中,?成?面布局。
在进入扫码?面后,Android 在 setContentView ?法中实例化了 DecoratedBarcodeView 类,通过构造函数调用了下?的代码,?首先实例化 BarcodeView,然后调?了 Android Camera 类的 initializeAttributes 方法,根据上面的 xml ?件的值,初始化相机?面,从而创建了相机扫码的?面。
2. 初始化扫描控件
在调用相机进?扫描前,还需要进行初始化的操作,设置好扫描成功时的操作。
通过调? DecoratedBarcodeView 的?法 decodeContinuous ,在 barcodeResult ?法中,对扫描成功的结果做处理,app 在这?获得设备的 MAC 地址,能够对设备进行增加删除。
3. 请求相机权限
在 Android 6.0 以上的版本中,为了更好的保护用户隐私,在第一次调?相机时,需要向?户申请相机的使?权限。等待用户允许后,才能够进?扫码。
4. 开始扫描
1. 创建 APP 扫码?面
在 xml ?面文件中写好 DecoratedBarcodeView 的信息,DecoratedBarcodeView 继承 FrameLayout 类,所以可以直接在 xml 文件中,?成?面布局。
在进入扫码?面后,Android 在 setContentView ?法中实例化了 DecoratedBarcodeView 类,通过构造函数调用了下?的代码,?首先实例化 BarcodeView,然后调?了 Android Camera 类的 initializeAttributes 方法,根据上面的 xml ?件的值,初始化相机?面,从而创建了相机扫码的?面。
2. 初始化扫描控件
在调用相机进?扫描前,还需要进行初始化的操作,设置好扫描成功时的操作。
通过调? DecoratedBarcodeView 的?法 decodeContinuous ,在 barcodeResult ?法中,对扫描成功的结果做处理,app 在这?获得设备的 MAC 地址,能够对设备进行增加删除。
3. 请求相机权限
在 Android 6.0 以上的版本中,为了更好的保护用户隐私,在第一次调?相机时,需要向?户申请相机的使?权限。等待用户允许后,才能够进?扫码。
4. 开始扫描
在 barcode_scanner.resume() 的?法后,相机就要开始识别屏幕中的?维码了。先是调用 CameraPreview 类的 resume() ?法,判断相机是否准备好,然后进?扫描解析?维码。
因为 Android 主线程只允许进? UI 操作?不能够进?耗时的操作,所以需要调? startDecoderThread 来创建?个?来扫描?维码的线程。
5. 解析?维码
在扫码线程扫描到?维码之后,扫码线程的 Handle 会接收到数据,然后对?维码图?进?解析。
6. 解析成功
在 decode() ?法中,调?的是 Zxing 库中的?维码解析算法,在解析成功后,使? Message 类发送消息至 resultHandle 去处理,这个 Handle 也就是最开始初始化时设置的操作。
在这个操作中,我们就可以获取?维码图?中的 MAC 地址了。
流程图
更多资讯,请关注?树云系列公众号: