二维码的生成和扫描

闲来无事,突然想研究二维码,于是上网查了下资料,谷歌官方其实有对应的SDK和Demo
谷歌官方demo:https://github.com/zxing/zxing

这个官方的GitHub比较坑爹,下载来的demo无法直接使用,仔细研究后发现,真正有关的是其中3个文件夹,分别是:core(这个是个开源的库,也可以直接使用com.google.zxing:core:3.2.1)、android-core(这个里面实际上就只有一个类CameraConfigurationUtils,坑爹)、android(居然还是eclipse的android project。。。)

大家要做的就是,通过android studio 将android文件夹中的eclipse project 转为 studio版本的(如果本身使用eclipse开发的小伙伴就不用转了),然后将core文件夹作为library导进project(或者直接使用com.google.zxing:core:3.2.1),再将CameraConfigurationUtils复制到project中,这样一个完整的zxing 二维码demo 就可以成功运行了

整个demo 不是很大,但是发现写的功能很全,可以作为一个小型的扫码器app来使用。我花了几天时间,仔细研究了其中相关的代码,然后把text纯文本的扫码功能和生成二维码的功能单独整理出来,做了一个简单的demo,小伙伴们可以上我的GitHub下载来参考参考
简易版demo https://github.com/linqinen708/QRCodeApplication

下面我把自己这几天研究二维码的扫码功能的主要功能和流程简单介绍下,让也要研究二维码的小伙伴们少走弯路。

1.先说一下二维码的生成(纯文本text),这个比较简单,主要用到一个类QRCodeEncoder,这个类主要用于二维码的生成,源码中方法很多,直接将文字生成二维码的方法实际上就一个encodeAsBitmap,小伙伴们只要在其中将String contentsToEncode对象传入就行了,在我自己整理的demo中,我已经封存成了一个方法public static Bitmap encodeAsBitmap(String contents, int dimension),感兴趣的小伙伴可以看看

2.下面说说扫码功能,这个功能比较复杂,用到的方法和类比较多,尤其是官方的demo写的比较复杂,研究了很久才把其中核心的方法和类整理出来,嫌官方demo复杂的小伙伴可以直接下载我的demo来看看
简易版demo https://github.com/linqinen708/QRCodeApplication

官方的demo功能很全,扫码识别条形码、二维码,还有网址、分享等等功能,所以demo看起来功能多,显得复杂,还用了个两个handler(CaptureActivityHandler和DecodeHandler)来处理信息,经过我不断的研究后才发行,实际上在工作的就是一个分线程(DecodeThread),最后我把它们3个整理在了一起,就用一个thread来处理(包含一个handler处理信息,其实也可以用回调来处理)

下面我说一下扫码的流程:
(1)首先进入界面CaptureActivity,然后会初始化各种信息
(2)核心方法是 initCamera(SurfaceHolder surfaceHolder),用来初始化相机功能
(3)initCamera方法中有一个类CaptureActivityHandler,这个类是用来控制扫码的预览、成功与失败回调、退出预览等主要功能
(4)在CaptureActivityHandler这个类中,会start一个DecodeThread线程,这个线程是用来分析预览的数据是否有相关的二维码信息
(5)DecodeThread中会初始化DecodeHandler,这个类用来发送分析数据的成功与失败
(6)DecodeHandler中有一个核心方法decode(byte[] data, int width, int height),这个方法用来分析预览的数据是否包含相关的二维码信息,如果有,就会分析里面的信息并生成一个Result类用来储存二维码的各类信息
(7)最后小伙伴们就可以处理Result来显示需要的二维码信息,流程结束

我将以上主要的类和方法都进行了整理,并且简单翻译了里面的英文注释,小伙伴们可以先看看我的demo了解主要流程后,再研究研究官方demo(如果是大神可以直接去研究,因为官方demo虽然复杂,但是逻辑很清晰)

这个官方demo功能很齐全,我只是研究了里面关于文本信息text的二维码生成和扫码功能

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值