二维码和条形码是app中很重要的功能,特别是二维码的使用非常普遍,现在常用的开源库目前就谷歌zxing和日本人写的zbar,个人对谷歌比较亲切所以我们在项目中使用zxing,zbar商用的话可能会有授权的问题,这里就不讨论二者的区别了,下面说说如何在app中集成二维码和条形码识别和生成的功能。
效果图:
由于项目的需要,需要集成二维码和条形码扫描的功能于是在网上找了一下,自己看了一些文章整理了一下,把生成和识别的功能都集成到一个demo里面了,把下载链接放给大家。
这里给出Zxing的官方源码包,但是不推荐直接使用,因为官方源码包含了很多冗余的功能,而我们需要的只是其中二维码和条形码扫描的那一部分:
官网下载的Zxing源码包
我找了一个简化的demo,同时修改了一下,增加了二维码和条形码生成的功能,下面上连接:
基于Zxing的二维码条形码扫描和生成demo
先看下目录结构:
- com.example.qr_codescan包下是自己自定义的Activity
- com.mining.app.zxing.camera包下是Zxing的操作相机的类
- com.mining.app.zxing.decoding包下是Zxing的解码类
- com.mining.app.zxing.image包下是处理图像的类
- com.mining.app.zxing.view包下是处理扫描界面的view类(如果要改变其展示界面需重写此类)
- com.mining.app.zxing.encoding是我添加的生成二维码和条形码的编码类
如果导入该功能的话,在自己的Activity中启动MipcaActivityCapture就可以了,然后修改其中的onResultHandler()方法处理返回结果,demo直接把扫描结果和图片返回给了前一个页面进行显示。
在MainActivity中调用EncodingHandler的createQRCode()方法和creatBarcode()方法可以生产二维码和条形码
参数解释如下:
Bitmap createQRCode(String str, //二维码加密内容
int widthAndHeight); //生成二维码的高宽
Bitmap creatBarcode(Context context, //页面上下文
String contents, //条形码加密内容
int desiredWidth, //条形码宽
int desiredHeight, //条形码高
boolean displayCode); //是否在生成的条形码下面显示条形码内容
要注意的是:
- 二维码可以加密包括中文在内的各种字符,而条形码只能加密数字英文和半角符号
启动扫描页面,扫描二维码:
Intent intent = new Intent();
intent.setClass(MainActivity.this, MipcaActivityCapture.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, SCANNIN_GREQUEST_CODE);