Android二维码ZXing开源框架的学习总结
一、概述
1、QRCode简介
QRCode全称Quick Response Code,通过在一个矩形区域内使用黑白像素来进行编码,高纠错性、高可用性、高识别性。
2、ZXing的简介
ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。目前支持以下格式:UPC-A,UPC-E、EAN-8,EAN-13、39码、93码。ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持JSR-234规范(自动对焦)的手机才能发挥其威力。
二、下载开源ZXing project
1、下载地址:https://github.com/zxing/zxing
2、下载之后
然而当我们点击了ZXing之后会发现这个项目有许多文件,而且比较复杂。所以我们应该到网上搜索其他开发者整理过的关于Android的ZXing代码。
3、下载其他开发者整理过的ZXing代码
(1)下载地址:http://download.csdn.net/detail/xiaanming/5990219 他的工程如下图:
(2)下载完成后解压,把该开发者的zxing包下的内容复制到自己的工程里面(可能需要修改一些提示的错误)。
(3)打开他的AndroidManifest.xml文件,要复制一些代码到自己的AndroidManifest.xml里面。
4、重新新建自己的工程,并且复制他的包和配置信息之后的工程如下图:
(1)扫描识别二维码的代码
<span style="font-size:18px;"><span style="white-space:pre"> </span>//扫描二维码
public void scanQRCode(View view){
Intent intent = new Intent();
intent.setClass(MainActivity.this, MipcaActivityCapture.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivityForResult(intent, 888);
}
<span style="white-space:pre"> </span>//接收并处理扫描结果
@Override
<span style="white-space:pre"> </span>protected void onActivityResult(int requestCode, int resultCode, Intent data) {
<span style="white-space:pre"> </span>super.onActivityResult(requestCode, resultCode, data);
<span style="white-space:pre"> </span>switch (requestCode) {
<span style="white-space:pre"> </span>case 888:
if(resultCode == RESULT_OK){
<span style="white-space:pre"> </span>Bundle bundle = data.getExtras();
<span style="white-space:pre"> </span>String resultStr = bundle.getString("result");
<span style="white-space:pre"> </span>}
break;
}
<span style="white-space:pre"> </span>} </span>
(2)生成二维码的代码
<span style="font-size:18px;"><span style="white-space:pre"> </span>//要转换的地址或字符串,可以是中文
public void createQRImage(String url)
{
try
{
//判断URL合法性
if (url == null || "".equals(url) || url.length() < 1)
{
return;
}
Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//图像数据转换,使用了矩阵转换
BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, QR_WIDTH, QR_HEIGHT, hints);
int[] pixels = new int[QR_WIDTH * QR_HEIGHT];
//下面这里按照二维码的算法,逐个生成二维码的图片,
//两个for循环是图片横列扫描的结果
for (int y = 0; y < QR_HEIGHT; y++)
{
for (int x = 0; x < QR_WIDTH; x++)
{
if (bitMatrix.get(x, y))
{
pixels[y * QR_WIDTH + x] = 0xff000000;
}
else
{
pixels[y * QR_WIDTH + x] = 0xffffffff;
}
}
}
//生成二维码图片的格式,使用ARGB_8888
Bitmap bitmap = Bitmap.createBitmap(QR_WIDTH, QR_HEIGHT, Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, QR_WIDTH, 0, 0, QR_WIDTH, QR_HEIGHT);
//显示到一个ImageView上面
sweepIV.setImageBitmap(bitmap);
}
catch (WriterException e)
{
e.printStackTrace();
}
}</span>
参考资料:
ZXing相关的技术博客:http://blog.csdn.net/xiaanming/article/details/10163203