Android中二维码的扫描与生成(zxing库)

Android中二维码的扫描与生成(zxing库)2 集成 java 源码 将 demo 工程 QrScan 中 app src main java 目录下包中的 zxing 和 util 复制到此工程对应的 app src main java 的包下 layout 复制 activity capture xml activity scanner xml toolbar scanner xml values 复制 替换其中的 attrs xml ids xml colors xml 1 将获取的 jar 包复制到工程的 app libs 目录下 刷新 然后去添加依赖

目录

一.zxing是什么?

二.集成zxing框架

         三.界面设计

四.二维码生成

五.二维码扫描


一.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.打开开发权限,在清单文件中添加开发权限

 
    
    
    
    
    
   

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

三.界面设计

activity_main.xml代码如下:

 
    
     
    
    
    

content.xml代码如下:

 
    
     
     

四.二维码生成

创建类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 
   
     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 
     
   

在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库)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220790.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:38
下一篇 2026年3月17日 下午7:39


相关推荐

  • 计算机硬盘电源接口,硬盘电源接口图解

    计算机硬盘电源接口,硬盘电源接口图解硬盘电源接口图解 最近很多朋友咨询关于并口硬盘电源线怎么接的问题 今天的这篇经验就和大家聊一聊这个话题 希望可以帮助到大家 方法 步骤分步阅读 1 4 叫并口电源接口或者叫串口电源接口 2 4 并口电源接口黄 12V 给硬盘主电机供电 3 4 红 5V 给硬盘的次电机供电 两个黑都一样 都是地线 电源输出时地线是在一个地方输出的 4 4 串口电源线通用的定义 1 数据 3 3 伏 2 电源地线 3 电源火

    2026年3月20日
    1
  • SQL用了Union后的排序问题

    SQL用了Union后的排序问题

    2021年10月15日
    295
  • (七十六) CountDownTimer

    (七十六) CountDownTimerdemo:https://github.com/happyjiatai/demo_csdn/tree/master/demo_76_countdowntimer1.CountDownTimer简介源码上是这么解释的:Scheduleacountdownuntilatimeinthefuture,with regularnotificationsoninterval…

    2026年1月14日
    6
  • 钱包地址 私钥_eth私钥就是收款地址吗

    钱包地址 私钥_eth私钥就是收款地址吗网上看到一个对比,很形象,可以用来加强理解:地址=银行卡卡号密码=银行卡密码keystore=银行卡助记词=私钥=银行卡+银行卡密码Keystore+密码=银

    2022年8月1日
    17
  • idea2021 激活码(最新序列号破解)

    idea2021 激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    123
  • 宝塔 多个版本PHP切换默认PHP版本

    宝塔 多个版本PHP切换默认PHP版本切换命令 ln sf www server php 72 bin php usr bin php 分析原因明明我的代码没问题为什么运行 PHPthink 报错了呢 看一下报错信息 是语法错误 看了看代码没问题啊 那么问题出在哪了 检查宝塔后发现原来我是安装了两个 php 这时候运行 php v 看到我的版本号是 root iZ2zeg9qhj8a php vPHP5 6 40 cli built May 2

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号