Android App扫描二维码功能的实现

转载:http://blog.csdn.net/yuzhiqiang_1993/article/details/78292004



1.基本的扫一扫

扫描二维码

从图片可以看到,我扫的二维码还是挺复杂的一个二维码,识别速度还可以。具体使用跟设备的摄像头配置有很大关系。

这里写图片描述

扫描条码(准确率不太高,后期再想办法优化吧,毕竟扫条码不是太常用)

这里写图片描述

2.闪光灯(如果设备支持闪光的话,显示闪光灯按钮,否则不会显示)

这里写图片描述

3.解析二维码图片

这里写图片描述

4.解析条码图片

这里写图片描述

5.生成二维码(可以添加logo)

这里写图片描述

扫描下载APK体验一下

可以先下载APK体验一下:

zxingDemo.apk

或者直接用浏览器扫描下载,不需要积分

这里写图片描述


使用方法


在使用上比之前版本简化了很多步骤,目前的版本应该足够日常使用了,如果你需要定制界面或者使用其中的某些功能,你可以直接去github下载demo,直接将moudle依赖到你的项目中,然后修改源码即可。觉得还行话记得给个start哦,我会持续进行优化的。

https://github.com/yuzhiqiang1993/zxing

这里我只介绍直接依赖的使用方法。 
1.添加依赖

在根build.gradle中添加maven { url 'https://jitpack.io' }

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在你的app的build.gradle中添加依赖implementation 'com.github.yuzhiqiang1993:zxing:2.1.1'

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])


    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support:support-vector-drawable:26.1.0'
    /*添加依赖*/
    implementation 'com.github.yuzhiqiang1993:zxing:2.1.1'

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如果你的gradle版本是2.x的 用compile代替implementation 即可。

2.依赖添加完之后就可以使用了 
首先记得申请权限,本来我是把权限给集成到库里的,但是这样的话会导致首次跳转到扫描页面申请权限时会阻塞,直到给权限为止,想了想还是把权限放开,在跳转扫描界面之前自己去处理权限比较好。

下面是需要动态申请的权限

Manifest.permission.CAMERA
Manifest.permission.READ_EXTERNAL_STORAGE
  • 1
  • 2

跳转到扫描界面

如下面代码所示,直接使用intent即可,也可以传一个ZxingConfig类,这个类可以控制是否显示底部的布局,是否播放提示音等,也可不传。

         Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
         /*ZxingConfig是配置类  可以设置是否显示底部布局,闪光灯,相册,是否播放提示音  震动等动能
         * 也可以不传这个参数
         * 不传的话  默认都为默认不震动  其他都为true
         * */

        //ZxingConfig config = new ZxingConfig();
        //config.setShowbottomLayout(true);//底部布局(包括闪光灯和相册)
        //config.setPlayBeep(true);//是否播放提示音
        //config.setShake(true);//是否震动
       //config.setShowAlbum(true);//是否显示相册
        //config.setShowFlashLight(true);//是否显示闪光灯
        //intent.putExtra(Constant.INTENT_ZXING_CONFIG, config);
        startActivityForResult(intent, REQUEST_CODE_SCAN);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在onActivityResult中接收解析的结果

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 扫描二维码/条码回传
        if (requestCode == REQUEST_CODE_SCAN && resultCode == RESULT_OK) {
            if (data != null) {

                String content = data.getStringExtra(Constant.CODED_CONTENT);
                result.setText("扫描结果为:" + content);
            }
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

好了,实现一个基本的扫一扫就是如此的简单

生成二维码

如果你有生成二维码的需求,可以直接通过CodeCreator.createQRCode(contentEtString, 400, 400, null);即可。

                try {
                    /*
                    * contentEtString:字符串内容
                    * w:图片的宽
                    * h:图片的高
                    * logo:不需要logo的话直接传null
                    * */

                    Bitmap logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                    bitmap = CodeCreator.createQRCode(contentEtString, 400, 400, logo);
                } catch (WriterException e) {
                    e.printStackTrace();
                }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

好了,基本就是这些了,上面有github地址,觉得好用的话给个start呦!是在不想使用github的话这里给出源码demo,需要的可以下载

源码版demo

github版的使用demo

github地址

  • 11
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
作者LeeWongSnail,源码QRCode,二维码扫描(基于系统提供的方法) 1、目的 现在越来越多的App添加了一个扫码功能,方便而且很实用,但是目前对弈iOS来说有些比较知名的库(比如ZXingObjC)库都比较大,而实际上,在iOS 7.0之后系统在AVFoundation框架中就已经实现了对于二维码扫描和生成的的支持,我的方法主要是对系统的一些东西稍作封装(QRCode) 2、生成二维码 目前见到的二维码一般是两种,中间有图片和没有图片的(通常是APP图标或者个人头像)或者是为二维码添加了背景颜色。这里我提供了三个方法,可以满足这几种需求。 /** * 生成二维码图片的方法 * * @param string 二维码包含的内容 * @param size 图片的尺寸 * @param topimg 如果中间需要添加 头像可以传入此参数 * * @return 包含要生成内容的二维码图片 */ + (UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)size Topimg:(UIImage *)topimg; /** * 生成二维码图片的方法 * * @param string 二维码包含的内容 * @param size 图片的尺寸 * @param pointType 点的类型(QRPointRect, QRPointRound) * @param positionType 位置的类型 (QRPositionNormal, QRPositionRound) * @param color 背景颜色 * * @return 包含要生成内容的二维码图片 */ +(UIImage *)qrImageForString:(NSString *)string imageSize:(CGFloat)size withPointType:(QRPointType)pointType withPositionType: (QRPositionType)positionType withColor:(UIColor *)color; /** * 生成二维码图片的方法 * * @param string 二维码包含的内容 * @param size 图片的尺寸 * @param topimg 如果中间需要添加 头像可以传入此参数 * @param color 背景颜色 * * @return 包含要生成内容的二维码图片 */ +(UIImage*)qrImageForString:(NSString *)string imageSize:(CGFloat)size Topimg:(UIImage *)topimg withColor:(UIColor*)color; 3、二维码扫描 这里 需要重要注意的是 rectOfInterest属性的设置 //它的作用就是设置扫描范围 output.rectOfInterest = scanCrop; 这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。 rectOfInterest都是按照横屏来计算的 所以当竖屏的情况下 x轴和y轴要交换一下。 宽度和高度设置的情况也是类似。 具体的扫描结果通过遵守AVCaptureMetadataOutputObjectsDelegate协议并实现 -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection
这个了项目【android-support-v7-appcompat】 里面 包含 R.styleable.AppCompatTheme这个变量,资源很有用,很全面。 这个是 ADT的项目, 好多人都在用 Android Studio了。。。可正常扫描二维码了,识别出来二维码的信息。 并且该项目是完整的源码:里面包含eclipse版本的 【android-support-v7-appcompat】 这个项目,可作为 Library 直接在 ADT中 被其他项目引用。 【顺便解决问题1 】 12-17 16:30:16.899 22855-22855/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.arcsoft.arcfacedemo, PID: 22855 java.lang.NoSuchFieldError: No static field abc_textfield_search_default_mtrl_alpha of type I in class Landroid/support/v7/appcompat/R$drawable; or its superclasses (declaration of 'android.support.v7.appcompat.R$drawable' 【解决问题2】 12-17 16:53:32.176 24695-24695/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.arcsoft.arcfacedemo, PID: 24695 java.lang.NoSuchFieldError: No static field AppCompatTheme of type [I in class Landroid/support/v7/appcompat/R$styleable; or its superclasses (declaration of 'android.support.v7.appcompat.R$styleable' appears in 【解决这2个问题的原因是 】: 【android-support-v7-appcompat】 这个项目 在eclipse中,即 ADT里面使用的时候 是需要 Library 被其他项目应用的,因为里面包含一些布局和资源。 在 ADT里面使用的时候 是需要 Library 被其他项目应用的,因为里面包含一些布局和资源。 在 ADT里面使用的时候 是需要 Library 被其他项目应用的,因为里面包含一些布局和资源。 在 ADT里面使用的时候 是需要 Library 被其他项目应用的,因为里面包含一些布局和资源。 【重要的事情说3遍!!!】【重要的事情说3遍!!!】【重要的事情说3遍!!!】
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值