【Android】基于ZXing库的二维码识别实现

【Android】基于ZXing库的二维码识别实现

前言

背景是这样的,和温乐组队参加粤嵌杯(混时长),我负责Android控制端部分(划水),需要用到二维码识别功能,于是在这里记录下研究二维码识别的过程。


正篇

一、ZXing库介绍

本次用到了开源库ZXing Android Embedded实现二维码的扫描。

ZXing Android Embedded 是用于Android的条形码扫描库,使用ZXing进行解码。由于二维码也是条形码中的一种,所以也能用该库扫描二维码

二、使用方法

添加gradle依赖

dependencies {
    ......
    compile 'com.journeyapps:zxing-android-embedded:3.5.0'
}

注:

  • 该库在需要时会自动引入ZXing库,无需额外手动引入。
  • buildToolsVersion ‘23.0.2’(构建工具的版本要>=23.0.2)
  • compile ‘com.android.support:appcompat-v7:23.1.0’ (support-v7包版本要在23+以上)
  • 最低支持的Android版本(API level 9+)

开始扫描
开始扫描需要先创建一个IntentIntegrator对象

IntentIntegrator intentIntegrator = new IntentIntegrator(MainActivity.this);    //创建IntentIntegrator对象
intentIntegrator.setPrompt("请扫描屏幕上的二维码");   //提示文字

然后用下面的方法即可打开扫描界面并开始扫描:

// 开始扫描
intentIntegrator.initiateScan();

扫描界面效果如图:

可以看到,默认的扫描界面是横屏的(扫描条形码的),因此我们需要通过设置将它默认为竖屏扫描

在Manifest.xml中添加如下配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.wangnan7.qrcodescandemo">

    <application
        ...
        <activity
            android:name="com.journeyapps.barcodescanner.CaptureActivity"
            android:screenOrientation="portrait"
            tools:replace="screenOrientation" />

    </application>

</manifest>

这样,就成功地设置为了默认竖屏扫描

效果如图:

获得扫描结果

扫描结果可以通过重写onActivityResult方法得到。
如:

public class MainActivity extends AppCompatActivity {

    ......

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // 获取解析结果
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                Toast.makeText(this, "取消扫描", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "扫描内容:" + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

这样,就会把扫描的结果通过Toast显示出来。

其他配置项
该库还有其他二维码配置选项

1. setBarcodeImageEnabled(boolean enabled):该方法用于设置“被扫描的二维码图片”可以保存在本地。

如果添加这个配置:

intentIntegrator.setBarcodeImageEnabled(true);

扫描后的二维码图片会被保存;如果不添加这个配置或参数设置为false,二维码图片不会被保存,我们拿到的路径 result.getBarcodeImagePath() 就会变成null。

2. setCaptureActivity(Class<?> captureActivity): 该方法用于设置扫描Activity。如果你不想用该库提供的扫描Activity,可以自定义一个扫描Activity,将该Acitivty的运行时类作为参数传进去。

3. setBeepEnabled(boolean enabled):该方法用于设置扫码成功后的提示音,传true为开启,不设置或设置false为关闭。

4. setCameraId(int cameraId):该方法用于设置相机ID。我们使用的手机一般都有前置和后置摄像头,该方法传0将会使用后置摄像头,传1将会使用前置摄像头。不设置则默认使用后置摄像头。

5. setDesiredBarcodeFormats(Collection desiredBarcodeFormats):该方法用于设置你期望的条形码格式。(该库提供了5种格式,如下所示)

6. setPrompt(String prompt):该方法用于设置扫描界面的提示信息。
举个例子,设置一条提示信息(如下图所示)

运行一下程序,可以看到扫描界面的“提示文字”(如下图所示)

7. setTimeout(long timeout):该方法用于设置扫描界面的超时时间。(避免用户打开扫描页面,忘记关闭)

要了解更多有关二维码扫描的内容,可以查阅这篇文章Android进阶 – 二维码扫描

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: