iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android中二维码的扫描和生成(使用zxing库)
  • 105
分享到

Android中二维码的扫描和生成(使用zxing库)

2024-04-02 19:04:59 105人浏览 泡泡鱼
摘要

目录一.zxing是什么?二.集成zxing框架三.界面设计四.二维码生成五.二维码扫描附:Android使用Zxing识别图片多个二维码总结一.zxing是什么? zxing是Go

一.zxing是什么?

zxing是Google推出的一个开源的二维码框架,可以实现使用手机的摄像头完成二维码的扫描和解码

二.集成zxing框架

1. 将获取的jar包复制到工程的app/libs目录下,刷新,然后去添加依赖

2. 集成java源码,将demo工程QrScan中app/src/main/java/目录下包中的zxing和util复制到此工程对应的app/src/main/java的包下

3. 修改package包名,修改import路径,修改类包名

4. 同步资源,复制资源目录

drawable:btn_back.png    flash_off.png    flash_on.png

layout:复制activity_capture.xml,activity_scanner.xml,toolbar_scanner.xml

raw:全部复制

values:复制 / 替换其中的attrs.xml,ids.xml,colors.xml

5.修改工具栏框架包和ViewFinderView包路径

6.打开开发权限,在清单文件中添加开发权限

    <!--摄像机权限-->
    <uses-permission android:name="android.permission.CAMERA" />
    <!--手机震动权限-->
    <uses-permission android:name="android.permission.VIBRATE" />
    <!--读取本地图片权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

7.最后运行一下工程,如果没报错的话就成功了

三.界面设计

activity_main.xml代码如下:

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
 
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
 
</com.google.android.material.appbar.AppBarLayout>
 
<include layout="@layout/content_main" />
 
<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    app:srcCompat="@android:drawable/ic_dialog_email" />

content.xml代码如下:

<TextView
    android:id="@+id/myTextView"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="48dp"
    android:hint="扫描结果"
    android:textSize="24sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/myScanButton"
    app:layout_constraintVertical_bias="0.0" />
 
<EditText
    android:id="@+id/myEditText"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:ems="10"
    android:hint="输入要生成二维码的字符"
    android:inputType="textPersonName"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
 
<Button
    android:id="@+id/myCreateButton"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:text="开始生成"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/myEditText" />
 
<ImageView
    android:id="@+id/myImageView"
    android:layout_width="202dp"
    android:layout_height="196dp"
    android:layout_marginTop="64dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.497"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/myCreateButton"
    app:srcCompat="@android:drawable/screen_background_light_transparent" />
 
<Button
    android:id="@+id/myScanButton"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="36dp"
    android:text="开始扫描"
    android:textSize="18sp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/myImageView" />

四.二维码生成

创建类CreateUtil,并编写createQRCode()方法来实现

public class CreateUtil {
    //String codestring:要生成二维码的字符串
    // int width:二维码图片的宽度
    // int height:二维码图片的高度
    public static Bitmap createQRCode(String codestring,int width,int height){
        try {
            //首先判断参数的合法性,要求字符串内容不能为空或图片长宽必须大于0
            if (TextUtils.isEmpty(codestring)||width<=0||height<=0){
                return null;
            }
            //设置二维码的相关参数,生成BitMatrix(位矩阵)对象
            Hashtable<EncodeHintType,String> hashtable=new Hashtable<>();
            hashtable.put(EncodeHintType.CHARACTER_SET,"utf-8");  //设置字符转码格式
            hashtable.put(EncodeHintType.ERROR_CORRECTION,"H");   //设置容错级别
            hashtable.put(EncodeHintType.MARGIN,"2"); //设置空白边距
            //encode需要抛出和处理异常
            BitMatrix bitMatrix=new QRCodeWriter().encode(codestring, BarcodeFORMat.QR_CODE,width,height,hashtable);
            //再创建像素数组,并根据位矩阵为数组元素赋颜色值
            int[] pixel=new int[width*width];
            for (int h=0;h<height;h++){
                for (int w=0;w<width;w++){
                    if (bitMatrix.get(w,h)){
                        pixel[h*width+w]= Color.BLACK;  //设置黑色色块
                    }else{
                        pixel[h*width+w]=Color.WHITE;  //设置白色色块
                    }
                }
            }
            //创建bitmap对象
            //根据像素数组设置Bitmap每个像素点的颜色值,之后返回Bitmap对象
            Bitmap qrcodemap=Bitmap.createBitmap(width,height,Bitmap.Config.ARGB_8888);
            qrcodemap.setPixels(pixel,0,width,0,0,width,height);
            return qrcodemap;
        }catch (WriterException e){
            return null;
        }
    }
}

在MainActivity中编写代码——生成二维码

//点击开始生成按钮监听事件
startBt1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String input=inputEt.getText().toString();  //获取用户输入的字符串  
        //调用CreateUtil类生成二维码后显示在界面上
        contentIv.setImageBitmap(CreateUtil.createQRCode(input,contentIv.getWidth(),contentIv.getHeight()));
    }
});

五.二维码扫描

MainActivity中编写代码

        //开始扫描按钮点击事件监听
        startBt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scanQRCode();
            }
        });
    
 
 
 
    //实现扫描二维码的方法
    private void scanQRCode() {
        //申请相机权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, Constant.REQ_PERM_CAMERA);
            return;
        }
        //申请文件(相册)读写权限
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Constant.REQ_PERM_EXTERNAL_STORAGE);
            return;
        }
        //二维码扫码
        //然后通过Intent机制启动zxing框架的CaptuReactivity,请求返回结果
        Intent intent = new Intent(this, CaptureActivity.class);
        startActivityForResult(intent, Constant.REQ_QR_CODE);
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //扫描结果回调
        if (requestCode == Constant.REQ_QR_CODE && resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String scanResult = bundle.getString(Constant.INTENT_EXTRA_KEY_QR_SCAN);
            //将扫描出的信息显示出来
            resultTv.setText(scanResult);
        }
    }
 
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case Constant.REQ_PERM_CAMERA:
                //摄像头权限申请
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //获得授权
                    scanQRCode();
                } else {
                    //被禁止授权
                    Toast.makeText(this, "请至权限中心打开本应用的相机访问权限", Toast.LENGTH_LONG).show();
                }
                break;
            case Constant.REQ_PERM_EXTERNAL_STORAGE:
                //文件读写权限申请
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //获得授权
                    scanQRCode();
                } else {
                    //被禁止授权
                    Toast.makeText(this, "请至权限中心打开本应用的文件读写权限", Toast.LENGTH_LONG).show();
                }
                break;
        }
    }
}

到此,一个简易的二维码生成与扫描就完成了

附:Android使用Zxing识别图片多个二维码

android通过zxing可识别bitmap多个二维码,具体使用如下

1.首先build文件添加依赖

implementation 'com.google.zxing:core:3.3.3'

2.使用 QRCodeMultiReader 来解析 Bitmap获取Result数组(二维码图片地址集合)

 public static com.google.zxing.Result[] decodeQR(Bitmap srcBitmap) {
        com.google.zxing.Result[] result = null;
        if (srcBitmap != null) {
            int width = srcBitmap.getWidth();
            int height = srcBitmap.getHeight();
            int[] pixels = new int[width * height];
            srcBitmap.getPixels(pixels, 0, width, 0, 0, width, height);
            // 新建一个RGBLuminanceSource对象
            RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
            // 将图片转换成二进制图片
            BinaryBitmap binaryBitmap = new BinaryBitmap(new    
            GlobalHistogramBinarizer(source));
            QRCodeMultiReader reader = new QRCodeMultiReader();// 初始化解析对象
            try {
                result = reader.decodeMultiple(binaryBitmap, 
                CodeHintsUtils.getDefaultDecodeHints());// 解析获取一个Result数组
            } catch (NotFoundException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

3.通过获取数组下的Result对象,result.getText();//得到二维码信息地址

总结

到此这篇关于Android中二维码扫描和生成(使用zxing库)的文章就介绍到这了,更多相关Android二维码扫描生成内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Android中二维码的扫描和生成(使用zxing库)

本文链接: https://www.lsjlt.com/news/166713.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中二维码的扫描和生成(使用zxing库)
    目录一.zxing是什么?二.集成zxing框架三.界面设计四.二维码生成五.二维码扫描附:Android使用Zxing识别图片多个二维码总结一.zxing是什么? zxing是go...
    99+
    2024-04-02
  • Android studio 实现生成二维码和扫描二维码
    效果图 build.gradle(:app)添加依赖 dependencies { implementation 'com.google.zxing:core:3.3.3' imple...
    99+
    2023-09-30
    android studio android ide
  • Android中google Zxing实现二维码与条形码扫描
    Android中google Zxing实现二维码与条形码扫描了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说...
    99+
    2023-05-31
    android zxing 二维码
  • Android利用zxing快速集成二维码扫描的实例教程
    前言大家应该都还记得,以前的我们常见的都是条形扫码,自从微信使用二维码扫描后,现在市场上基本都用二维码扫描,基本上每一个项目都会有一个二维码扫描,这篇就简单快速的实现一个扫描效果,让我们对二维码的扫描有一个初步的认识和让我们的项目可以快速的...
    99+
    2023-05-30
    android zxing 集成二维码
  • Android Zxing二维码扫描图片拉伸的解决方法
    二维码扫描,Android Zxing图片拉伸解决。Zxing是google提供的二维码扫描工程默认是横屏的  转换成竖屏后图片出现拉伸 这里提供解决办法: Zxing 修改 CameraConfigurati...
    99+
    2023-05-31
    android 二维码 图片拉伸
  • Android中利用zxing实现自己的二维码扫描识别详解
    前言在上一篇文章中已经简单介绍了zxing的使用,快速集成到自己的项目中,但是使用的扫描我们没办法根据自己的需求来做自己的扫描界面,所以这篇我们来学习一下如何根据自己的需求来实现二维码的扫描。当然用到的库依然还是google的zxing。下...
    99+
    2023-05-30
    android zxing 二维码扫描识别
  • Android利用zxing生成二维码的详细过程
    本篇内容介绍了“Android利用zxing生成二维码的详细过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录二维码生成原理(即工作原理...
    99+
    2023-06-20
  • Android Zxing二维码扫描图片拉伸问题的解决方法
    还是这个接手项目,二维码扫描集成的是zxing,扫描界面的图像有明显的拉伸变形。这种问题,根据以往的经验,一般是x,y轴错位引起的,处理好x,y轴的问题,一般可以解决问题。由于这个问题,之前有很多人遇到,并分享在网上了,所以,我这里也就不需...
    99+
    2023-05-31
    android 图片拉伸 roi
  • Android利用zxing生成二维码的过程记录
    目录二维码生成原理(即工作原理)效果图如下:前提:源码如下:总结二维码生成原理(即工作原理) 二维码官方叫版本Version。Version 1是21 x 21的矩阵,Versio...
    99+
    2024-04-02
  • QR-Code二维码如何利用zxing库实现生成
    QR-Code二维码如何利用zxing库实现生成?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。详解使用zxing库生成QR-Code二维码首先是引入zxing库,我是使用mav...
    99+
    2023-05-31
    zxing库 qr-code 二维码
  • Java使用Zxing二维码生成的简单示例
    目录1、二维码简介2、ZXing简介3、示例3.1 搭建一个maven项目,引入Zxing依赖包3.2 创建QrCodeUtil.java 类总结1、二维码简介 二维条形码是用某种特...
    99+
    2023-01-17
    Java二维码生成 java代码生成二维码 java zxing二维码生成
  • 如何在 ASP 中实现二维码的生成与扫描?
    二维码已经成为了现代通信和支付的重要方式。在 ASP 中,生成和扫描二维码是一项非常有用的功能,可以应用于各种场景,例如电子支付、门禁管理、会员卡等等。本文将介绍如何在 ASP 中实现二维码的生成与扫描。 一、生成二维码 在 ASP 中,我...
    99+
    2023-10-25
    二维码 laravel 面试
  • Android中谷歌推出的官方二维码扫描库怎么用
    小编给大家分享一下Android中谷歌推出的官方二维码扫描库怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相信二维码扫描现在大家都已经不稀奇了,几乎所有的A...
    99+
    2023-06-29
  • 如何在 Go 语言中实现二维码生成和扫描的接口?
    Go 语言是一种高效的编程语言,它的强大之处在于它的简洁性和高效性。在这篇文章中,我们将讨论如何使用 Go 语言实现二维码生成和扫描的接口。我们将涵盖以下主题: 什么是二维码? 生成二维码的方式 Go 语言中的二维码生成 扫描二维码 Go...
    99+
    2023-08-27
    二维码 索引 接口
  • Android中怎么实现二维码扫描功能
    这期内容当中小编将会给大家带来有关Android中怎么实现二维码扫描功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 开发准备1.1 android studio 安装&emsp;&e...
    99+
    2023-06-04
  • 基于google zxing的Java二维码生成与解码
     本文实例为大家分享了Java二维码生成与解码的具体代码,供大家参考,具体内容如下一、添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包)<!-- google二维码工具 --><depende...
    99+
    2023-05-31
    google zxing java
  • 在大数据时代,Python如何应用于二维码生成和扫描?
    在大数据时代,二维码作为一种快速便捷的信息传递方式,被广泛应用于各个领域。Python作为一种高效、易学、易用的编程语言,也在二维码生成和扫描方面发挥着越来越重要的作用。本文将介绍Python在二维码生成和扫描方面的应用。 一、二维码生成 ...
    99+
    2023-11-04
    大数据 二维码 自然语言处理
  • python中扫描条形码和二维码的实现代码
    简单说明,代码太难懂,先做此记录留待来日在看 步骤: 1,pip install pyzbar安装好该模块。pyzbar模块是Python一个开源库用于扫描和识别二维码信息。 2,...
    99+
    2024-04-02
  • 分布式系统中如何利用Python实现高效的二维码生成和扫描?
    随着移动互联网的快速发展,二维码已经成为了一种非常重要的信息传递方式。在很多场景中,我们需要使用二维码来实现不同设备之间的信息交换,比如支付、扫码登录等。在分布式系统中,如何实现高效的二维码生成和扫描是一个非常有意义的问题。 Python...
    99+
    2023-10-02
    关键字 二维码 分布式
  • Android详细讲解谷歌推出的官方二维码扫描库
    相信二维码扫描现在大家都已经不稀奇了,几乎所有的App里都会支持这个功能。 这里我要问大家一个问题,你们都是如何在自己的App中加入二维码扫描功能的呢? 相信会有一大部分朋友说,使用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作