android二维码扫描、读取、识别、生成、带logo

本文详细介绍了一款封装良好的二维码处理库的使用方法,包括二维码的扫描、生成及解析等功能,并提供了具体的配置步骤与代码示例。

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

注:本文使用的是Github上的工程,点击访问,如您是原作者,如有侵权,麻烦联系我删除!

效果图(摄像头扫描在代码中有,但是由于录屏原因,效果图没有录制):

这里写图片描述


原作者基本把关于二维码的操作基本都封装好了,使用起来也比较简单,本文只是轻讲解关于怎么使用,基本可以满足所有要求,推荐使用!


首先是添加依赖到as中,两个版本任选一个(建议使用最新版):

    (老版本)
    compile 'cn.bingoogolapple:bga-qrcodecore:1.0.7@aar'
    compile 'cn.bingoogolapple:bga-zxing:1.0.7@aar'
    compile 'com.android.support:design:23.3.0'

    (最新版)
    compile 'com.google.zxing:core:3.2.1'
    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'
    compile 'cn.bingoogolapple:bga-zxing:1.1.3@aar'


添加所用到的权限

//调用相机
<uses-permission android:name="android.permission.CAMERA" />
//震动(用不到震动可以去掉)
<uses-permission android:name="android.permission.VIBRATE" />
//闪光灯(如不用闪光灯可以去掉)
<uses-permission android:name="android.permission.FLASHLIGHT" />


一、摄像头读取二维码:

首先,布局文件中使用封装好的布局:

<cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/zx_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:qrcv_animTime="1000"
        app:qrcv_borderColor="@android:color/white"
        app:qrcv_borderSize="1dp"
        app:qrcv_cornerColor="@color/colorPrimaryDark"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_maskColor="#99000000"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="@color/colorPrimaryDark"
        app:qrcv_scanLineSize="1dp"
        app:qrcv_topOffset="90dp" />


参数参考:

属性名说明默认值
qrcv_topOffset扫描框距离扫描视图顶部的距离90dp
qrcv_cornerSize扫描框边角线的宽度3dp
qrcv_cornerLength扫描框边角线的长度20dp
qrcv_cornerColor扫描框边角线的颜色@android:color/white
qrcv_rectWidth扫描框的宽度200dp
qrcv_maskColor除去扫描框,其余部分阴影颜色33FFFFFF
qrcv_scanLineSize扫描线的宽度1dp
qrcv_scanLineColor扫描线的颜色「扫描线和默认的扫描线图片的颜色」@android:color/white
qrcv_scanLineHorizontalMargin扫描线距离左右边框的间距0dp
qrcv_isShowDefaultScanLineDrawable是否显示默认的图片扫描线「设置该属性后 qrcv_scanLineSize 将失效,可以通过qrcv_scanLineColor设置扫描线的颜色,避免让你公司的UI单独给你出特定颜色的扫描线图片」false
qrcv_customScanLineDrawable扫描线的图片资源「默认的扫描线图片样式不能满足你的需求时使用,设置该属性后qrcv_isShowDefaultScanLineDrawable、qrcv_scanLineSize、qrcv_scanLineColor 将失效」null
qrcv_borderSize扫描边框的宽度1dp
qrcv_borderColor扫描边框的颜色@android:color/white
qrcv_animTime扫描线从顶部移动到底部的动画时间「单位为毫秒」1000



然后在activity中给控件设置好识别处理监听

        //设置结果处理
        //mQR.setResultHandler(this);(如果使用的老版本的依赖,使用这个)
        mQR.setDelegate(this);(如果使用的新版本的依赖,使用这个)
        //开始读取二维码
        mQR.startSpot();


然后当前类实现QRCodeView.Delegate,实现两个回调,onScanQRCodeSuccess()与onScanQRCodeOpenCameraError():

   /**
     * 扫描二维码成功
     * @param result 识别的结果
     */
    @Override
    public void onScanQRCodeSuccess(String result) {
        Toast.makeText(ScanActivity.this, result, Toast.LENGTH_SHORT).show();
    }

    /**
     * 打开相机出错
     */
    @Override
    public void onScanQRCodeOpenCameraError() {
        Toast.makeText(ScanActivity.this, "打开相机出错!请检查是否开启权限!", Toast.LENGTH_SHORT).show();
    }



下面是控件方法总结:

mQR.startCamera();开启预览,但是并未开始识别
mQR.stopCamera();停止预览,并且隐藏扫描框
mQR.startSpot();开始识别二维码
mQR.stopSpot();停止识别
mQR.startSpotAndShowRect();开始识别并显示扫描框
mQR.stopSpotAndHiddenRect();停止识别并隐藏扫描框
mQR.showScanRect();显示扫描框
mQR.hiddenScanRect();隐藏扫描框
mQR.openFlashlight();开启闪光灯
mQR.closeFlashlight();关闭闪光灯
mQR.startSpotDelay(ms);延迟ms毫秒后开始识别



以上就是扫描读取二维码,比较简单,就不做过多介绍

二、生成二维码以及识别图片上的二维码

生成二维码与生成带logo的二维码都调用QRCodeEncoder.encodeQRCode()方法:

生成二维码:

        /**
          * 生成二维码
          * 第一个参数为要生成的文本
          * 第二个参数为生成尺寸
          * 第三个参数为生成回调
          */
          QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), new QRCodeEncoder.Delegate() {
            /**
             * 生成成功
             * @param bitmap
             */
            @Override
            public void onEncodeQRCodeSuccess(Bitmap bitmap) {
                ivqr.setImageBitmap(bitmap);
            }

            /**
             * 生成失败
             */
            @Override
            public void onEncodeQRCodeFailure() {
                Toast.makeText(GenerateActivity.this, "生成二维码失败", Toast.LENGTH_SHORT).show();
            }
        });

生成带logo二维码:


/**
  * 生成二维码
  * 第一个参数为要生成的文本
  * 第二个参数为生成尺寸
  * 第三个参数为生成二维码颜色
  * 第四个参数为logo资源
  * 第五个参数为生成回调
  */         QRCodeEncoder.encodeQRCode(etinput.getText().toString().trim(), DisplayUtils.dp2px(GenerateActivity.this, 160), Color.parseColor("#000000"), ((BitmapDrawable)ivlogo.getDrawable()).getBitmap(), new QRCodeEncoder.Delegate() {
            @Override
            public void onEncodeQRCodeSuccess(Bitmap bitmap) {
                ivqr.setImageBitmap(bitmap);
            }

            @Override
            public void onEncodeQRCodeFailure() {
                Toast.makeText(GenerateActivity.this, "生成带logo的二维码失败", Toast.LENGTH_SHORT).show();
            }
        });

解析图片上的二维码、条形码:

/**
  * 解析二维码、条形码
  * 第一个参数为带有二维码的图片
  * 第二个参数为解析回调
  */  
QRCodeDecoder.decodeQRCode(bitmap, new QRCodeDecoder.Delegate() {

            /**
              * 解析成功
              */ 
            @Override
            public void onDecodeQRCodeSuccess(String result) {
                Toast.makeText(GenerateActivity.this, result, Toast.LENGTH_SHORT).show();
            }

            /**
              * 解析失败
              */ 
            @Override
            public void onDecodeQRCodeFailure() {
                Toast.makeText(GenerateActivity.this, "解析二维码失败!", Toast.LENGTH_SHORT).show();
            }
        });


好了,就介绍到这里,基本也没什么说的,本文只是说下使用方法,使用起来也比较灵活,比较简单,赞一下!



本文内容如有不懂,可以下载apk安装手机看看效果,也可以参考代码!

本文相关下载: 点击免费下载源码      点击免费下载apk软件

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值