使用ZXing扫描和生成二维码

本文介绍了如何在Android应用中集成并使用ZXing库进行二维码的扫描和生成。ZXing是一个开源的条形码解码库,支持多种格式。在Android集成时,重点关注核心模块core、android-core和android。扫描二维码时,直接使用CaptureActivity,而生成二维码则参考EncodeActivity。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZXing是一个可以生成和解析多种格式的1D/2D条形码的开源类库,采用Java实现。Android和JavaSE可以集成使用。

示例运行效果如下:


网上流传的关于ZXing的代码库很多,但几乎都是很老的版本了。而ZXing一直在更新和优化,当前最新版本已经到3.2.1,我们可以在github上下载到最新的代码库。

ZXing项目地址:
https://github.com/zxing/zxing


如果想要最新的release版本,可以在如下的链接找到:
https://github.com/zxing/zxing/releases



代码库下载下来后,会发现里面包含的代码很多。在Android集成中,我们只需要下面三个部分。


core:解码库的核心模块,无论是Android还是JavaSE在集成时都需要使用到。内部代码包名com.google.zxing。
android-core:android模块需要使用到,里面只有一个类com.google.zxing.client.android.camera.CameraConfigurationUtils。
android:集成到Android客户端需要使用的模块。内部代码包名com.google.zxing.client。

将上面三个模块集中到一起,工程就可以运行起来了。


一、扫描二维码
我们在添加扫描二维码功能时,只需使用CaptureActivity类即可。如果需要定制扫描窗口,可修改ViewfinderView类。

(1).CaptureActivity类
该类在.client.android包下,负责显示扫描界面和对二维码解析结果的处理,是我们在导入该库时需要使用的类。

打开capture.xml可以看到,该界面由SurfaceView和ViewfinderView组成。

<merge xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools">
    <SurfaceView android:id="@+id/preview_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <com.google.zxing.client.android.ViewfinderView
        android:id="@+id/viewfinder_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</merge>
SurfaceView全屏显示摄像头拍摄的图像,ViewfinderView绘制扫描窗口。

DecodeHandler类在decode()方法执行完成时,会向CaptureActivityHandler发送消息,如果是解析成功,会调用CaptureActivity类的handleDecode()方法。在handleDecode()方法中,可以获取到解析结果。在该方法内部,我们可以添加自己的代码,比如在获取到结果后执行页面跳转。

public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
    ResultHandler resultHandler = ResultHandlerFactory.makeResultHandler(this, rawResult);
    CharSequence code = resultHandler.getDisplayContents();
    // add your code
}

(2).ViewfinderView类
该类在.client.android包下,负责绘制扫描窗口。
如果需要定制窗口的大小,扫描线条的颜色,闪烁小圆点的颜色等,可以修改此类的onDraw()方法。


二、生成二维码
生成二维码,可参考EncodeActivity类。EncodeActivity类在.client.android.encode包下,接收一个字符串并将对应的二维码显示出来。
使用如下方法,传入需要生成二维码的字符,即可启动EncodeActivity类生成二维码。

private void startEncodeActivity(String text) {
    Intent intent = new Intent(Intents.Encode.ACTION);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT);
    intent.putExtra(Intents.Encode.DATA, text);
    intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString());
    startActivity(intent);
}
在EncodeActivity类中,调用的是QRCodeEncoder类来生成二维码图片的Bitmap对象。
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(this, intent, dimension, useVCard);
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();

最后附上ZXing的工程代码:
http://download.youkuaiyun.com/detail/ruancoder/9607915

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值