前言
现在的应用中二维码扫描已经成为一个应用必不可少的功能,现在大部分Android二维码扫描都是基于zxing和Zbar,这文章就来介绍一下基于zxing的二维码扫描。先看下效果图
虽然现在的关于二维码的文章有很多,但是很多都是交我们怎么使用,在使用的时候我也遇到了很多问题,比如。UI界面太丑,没有用的文件太多,扫描太慢,版本太老。本Demo使用的是3.x的是比较新的版本。我用的小米2A(api=19)亲测在正常情况下扫描时间和QQ微信差不多,我的界面是类防QQ的也是比较美观的。那么我们看看如何使用和文件的作用。
zxing
zxing官网 这是zxing官网。想了解更多的可以去官网,里面有文档不过在我看来。第三方库的使用我们没有必要完全了解,整体上我们了解所需要功能即可,这样减少了学习时间。
为什么选择zxing
google的开源项目,高可定制性
可以识别多种码,不仅仅是二维码
不依赖第三方库,使用起来简单
zxing的使用
zixng JAR
我们可以去官网,如果是Android Studio的话也可以在线搜索zxing jar,导入完成后别忘了ADD library。res文件
drawable
文件中主要放的是一些我们显示界面的图片和一些点击按钮的backgroundlayout
activityqrcodecapture_layout.xml是zxing扫描的主界面,另外两个布局就是我们在开始图片中看到的,一个头部,一个脚部的布局colors,dis,strings,styles,raw,xml
这些是zxing中一些类的资源文件和我们自定义布局的一些资源文件,不导入会报错,raw是我们扫描完成后的音效,我们也可以根据需求改成自己的音效(但是要注意的是文件格式和名字尽量要相同,避免出错和资源找不到),xml就是zxing用到的资源文件,我们直接复制过来就行。PS:如果你是从官网拷贝,那么你自需要拷贝和我一样的就行。我这里只是多了一些drawwable中的布局图片和头部脚部2个布局
关键类
app
CaptureActivity 主要是我们的扫码界面,在这里我们引入我们自己的头部脚部布局,并给控件点击事件,在这个类中我们重点看这几个方法:
/**
* 闪光灯点击事件
*/
private OnClickListener click = new OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.button_back) {
//返回按钮
finish();
} else if (id == R.id.flash_btn) {
//打开关闭闪光灯
if (!isFlash) {
CameraManager.get().turnLightOn();
} else {
CameraManager.get().turnLightOff();
}
isFlash = !isFlash;
} else if (id == R.id.photo_btn) {
//扫描二维码图片
// 打开手机中的相册
Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); // "android.intent.action.GET_CONTENT"
innerIntent.setType("image/*");
//封装intent
Intent wrapperIntent = Intent.createChooser(innerIntent, "选择二维码图片");
startActivityForResult(wrapperIntent, REQUEST_CODE);
} else if (id == R.id.qrcode_btn) {
// 跳转到生成二维码页面
Bitmap b = createQRCode();
Intent intent = getIntent();
intent.putExtra("QR_CODE", b);
setResult(200, intent);
finish();
}
}
};
所有扫码界面的点击事件都在这个Activity中,可以看到zxing给我做了比较好的封装,只需要2行代码我们就可以控制闪光灯的开关。扫描图片二维码的点击事件也比较简单我们自需要打开相册。并用startActivityForResult启动相册。
@Override
protected