Zxing直接将byte数组生成QRcode

需求:将手机获取到的特殊信息写入到二维码,客户扫二维码直接获取二维码原始信息解析获取数据;

问题 1: 由于信息比较大最少有一千多byte。经试验一张二维码数据量一千一下有较高的识别率,因此要对数据进行压缩。

        2:zxing原生只能写入string型的数据。

为了尽可能多的写入数据,采用gzip对数据进行压缩,并对压缩后的数据进行crc8校验。

过程:github下载源码 ,下载完后目录如下:

    android、android-core、core是我们安卓要用到的,本次主要用到的是core。

   查看源码后发现我们写入的string最终还是通过8位的二进制写入,因此只要对相关源代码进行修改就可以达到我们直接写入byte[],来减少数据量。

将QRCodeWriter下的encoder等相关方法全部全部改为传入byte[]数组,最好不要在原方法上直接修改,方便保留原功能。

Encoder的encoder方法内的mode直接改为Mode.BYTE,接下来需要重新编译项目生成 core-3.x.x.jar。

因为原项目是用maven来进行构建的,所以需要本地有maven环境,若没有自己重新下载安装具体百度。

安装完成,添加maven到环境变量 进入到core所在的文件夹 ,输入mvn -DskipTests -Dgpg.skip=true install

第一次编译需要等待下载很多依赖文件,所以慢一些。最终会在core下生成一个tagert文件夹

圈起来的就是我们修改后的core.jar。

导入我们的项目libs下即可。最终获取的不要直接取rawResult解析后text,需要直接获取rawBytes byte数组即原始的qr内容。

intent.putExtra(Constant.CODED_CONTENT, rawResult.getRawBytes());