1.实现扫一扫功能需要用到解码库,才能识别出二维码信息, 
下面提供两个开源库地址: 
ZBar:https://github.com/ZBar/ZBar 
Zxing:https://github.com/zxing/zxing

2.熟悉Android自定义Camera相关知识


然而,当我们打开上述的两个库后,可能发现并没什么卵用. 

因为官方的两个库,里面包含的东西实在太多的,而我们仅仅需要Android中的小部分. 
怎么办捏,不用担心,上面的链接其实只是我用来装逼的,这样才显得我的逼格高. 
在我们之前已经有很多人为前辈做过扫一扫功能,所以分享了很多相应的jar包,SO文件,我们只要拿过来用就行了.

本文用的是Zbar实现扫一扫,因为根据本人对两个库的使用比较,发现Zbar解码比Zxing速度要快,实现方式也简单

  • 集成:

打开源码项目,找到里面的箭头扫一扫Module

进入大佬自己的Android studio项目,直接点击File->New->Import Module 选择Demo文件导入即可. 
记得在App 的gradle添加依赖. compile project(':zbarcode')


使用代码

进入扫一扫

Intent intent1 = new Intent(MainActivity.this, CaptureActivity.class);        startActivityForResult(intent1, QR_CODE);
  • 1
  • 2

获取返回的结果

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);        if (requestCode == QR_CODE) {            Bundle b=data.getExtras();            String result = b.getString(CaptureActivity.EXTRA_STRING);            Toast.makeText(this, result + "", Toast.LENGTH_SHORT).show();        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注: 请根据大佬自己项目的需求,配置右边SO库架构,对应删掉左边多余的文件夹

源码分析

ZbarCode结构

CaptureActivity:为扫一扫界面的Activity; 
AutoFocusManager:相机自动聚焦管理类 
CameraConfigurationManager:相机参数信息的操作类 
CameraManager:为自定义相机操作的封装,管理相机的打开,取景,参数,回收处理. 
PreviewCallback:图像数据回调处理; 
PreviewCallback:主线程Handler; 
DecodeThread:解码子线程; 
DecodeHandler:子线程Handler; 
BeepManager:扫码操作滴的声音处理;

流程:

扫一扫大致流程如下序列图:

CaptureActivityCaptureActivitySurfaceViewSurfaceViewCameraManagerCameraManagerZbar库Zbar库出始化SurfaceView初始化完毕打开摄像头判断是否可以开启相机已开启传递SurfaceHoler开起预览开启预览获取摄像头参数开启自动聚焦Callback回调图像数据开启子线程传递相机参数和相机图像数据在子线程成解码把解码状态还回成功,得到结果失败,重新回调图像数据,进行解码

更多相关文章

  1. linux和android端的pthread学习
  2. Android异步消息处理机制深度解析
  3. 解析 Android(安卓)异步消息机制,深入了解 Handler、Looper、Mess
  4. Android之Service与IntentService的比较
  5. android 在子线程中使用Toast等功能
  6. Android(安卓)消息传递机制分析
  7. 我的Android读书笔记——(1)
  8. AsyncTask 很好
  9. 【转】Invalidate和postInvalidate的区别

随机推荐

  1. android软件版本升级时,安装新版本后,没有
  2. android中如何获取经纬度?
  3. 自定义ProgressBar的样式
  4. Android下拉刷新以及自动加载更多
  5. ARM cortex A8/9 - Android(安卓)NDK - N
  6. Android判断Activity是否在最上层的方法
  7. Android培训班(17)
  8. androidのXlist框架上拉下拉刷新案例
  9. Android(安卓)3D壁纸开发设计
  10. EventBus源码解析(基于Android(安卓)O)