当前位置: 首页 > news >正文

Android扫码ZXing

1. 获取权限

请注意动态申请及重写申请结果返回方法。

<uses-permission android:name="android.permission.CAMERA"/>

2. 添加依赖

//Gradle Scripts -> build.gradle(Module:app)
implementation 'com.google.zxing:core:3.4.1'
implementation 'com.journeyapps:zxing-android-embedded:4.2.0'

3. 引入

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

4. 简易扫码

(1) 启动扫码

通常,扫码是由一个按钮触发,跳转至扫码Activity(CaptureActivity)。

setDesiredBarcodeFormats()方法用于设置扫码的类型(不同类型间逗号分隔):

  1. Code 39 条形码

    • 数据容量:通常用于较短的文本字符串,支持数字、大写字母和一些特殊字符。
    • 字符集:包含数字 0-9、大写字母 A-Z 和一些特殊字符(如空格、破折号等)。
    • 用途:广泛用于工业、物流、标签等领域,用于标识物品或包装。
  2. Code 93 条形码

    • 数据容量:比 Code 39 更高,可以编码更多字符。
    • 字符集:支持所有的 ASCII 字符。
    • 用途:常用于标签、物流追踪、文档标识等领域,提供了更高的数据密度和安全性。
  3. Code 128 条形码

    • 数据容量:是一种高密度条形码,具有更高的数据编码能力。
    • 字符集:支持所有的 128 个 ASCII 字符,包括数字、字母、符号等。
    • 用途:广泛应用于零售、物流、运输等领域,用于编码大量字符和数据。
  4. UPC-A 条形码

    • 数据容量:用于编码商品标识符,可以编码 12 个数字。
    • 字符集:仅限数字。
    • 用途:主要用于零售业,标识商品,常见于北美地区。
  5. UPC-E 条形码

    • 数据容量:压缩版本的 UPC-A,可以编码 6 个数字。
    • 字符集:仅限数字。
    • 用途:通常用于小型商品包装,空间有限的情况下采用。
  6. EAN-8 条形码

    • 数据容量:编码 8 个数字。
    • 字符集:仅限数字。
    • 用途:类似 UPC-E,用于小型商品包装,空间有限的情况下采用。
  7. EAN-13 条形码

    • 数据容量:编码 13 个数字。
    • 字符集:仅限数字。
    • 用途:在全球范围内用于标识商品,常见于欧洲和其他地区
  8. QR码(Quick Response Code): 如前所述,这是一种由Denso Wave开发的二维码,最初设计用于跟踪汽车零部件。它被广泛应用于各种领域,尤其是移动支付和信息快速传递。

  9. Data Matrix: 这是另一种常见的二维码类型,它是由美国公司International Data Matrix(ID Matrix)于1989年创建的。Data Matrix常用于工业标识和物流管理。

  10. PDF417: 这是一种二维码,其名称源自它的编码规范,即PDF(Portable Data File)417。它常用于存储大量数据,如驾驶执照、护照和车辆注册证明等。

  11. Aztec Code: 这是一种用于存储数据的二维码,通常被用于票务和航空领域。

  12. MaxiCode: 这是由美国邮政服务用于自动识别包裹的一种二维码。

在中国常用的条码格式为:EAN-13 和 UPC-A 。 

button.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {IntentIntegrator intentIntegrator=new IntentIntegrator(MainActivity.this);//设置所需扫描的条码格式----可有多种,且可同时有条码和二维码intentIntegrator.setDesiredBarcodeFormats(IntentIntegrator.CODE_39,IntentIntegrator.CODE_93,IntentIntegrator.CODE_128,IntentIntegrator.UPC_A,IntentIntegrator.UPC_E,IntentIntegrator.EAN_8,IntentIntegrator.EAN_13);intentIntegrator.setBeepEnabled(true);//扫描成功是否有提示音intentIntegrator.setPrompt("扫描");//提示字符串intentIntegrator.setCameraId(0);//设置摄像头,0为背摄,1为正摄intentIntegrator.setOrientationLocked(false);//是否方向锁定intentIntegrator.setBarcodeImageEnabled(true);//是否保存扫描成功的图片intentIntegrator.initiateScan();//启动扫描器}
});

(2) 获取扫描结果

扫码界面本身也是Activity,所以想要获取扫码结果可重写onActivityResult()方法

//本码中TextView用于显示扫码结果
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {IntentResult intentResult=IntentIntegrator.parseActivityResult(requestCode, resultCode, data);//判断是否为扫码返回的if(intentResult!=null){//判断是否扫描成功if(intentResult.getContents()!=null){textView.setText(intentResult.getContents());}else {textView.setText("扫描无结果");}}super.onActivityResult(requestCode, resultCode, data);
}

5. 自定义扫码界面

扫码页面是由initiateScan()方法启动,不断查看源码可知,该方法本质是启动了一个名为CaptureActivity的页面

我们可以创建一个新的Activity并用setCaptureActivity()方法取代CaptureActivity。

为了使自定义的Activity具有CaptureActivity的能力,我们首先在Activity中设置一个com.journeyapps.barcodescanner.DecoratedBarcodeView控件,然后将CaptureActivity的Java代码复制到Activity的Java文件中并修改部分id即可。还可以在Activity添加更多的控件以满足我们的自定义需求。

(1) 自定义Activity的XML文件

app:zxing_preview_scaling_strategy="centerCrop"这个属性指定了预览图像的缩放策略。在这里,设置为 centerCrop,表示预览图像将按比例缩放并截取中间部分以适应。

app:zxing_use_texture_view="false"这个属性指定是否使用 TextureView 来显示相机预览。在这里,设置为 false,表示不使用 TextureView。不使用时为四周透明。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MyCaptureActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><com.journeyapps.barcodescanner.DecoratedBarcodeViewandroid:id="@+id/decoratedBarcodeView"android:layout_height="150dp"android:layout_width="150dp"android:layout_centerInParent="true"app:zxing_preview_scaling_strategy="centerCrop"app:zxing_use_texture_view="false" /></RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

(2) 自定义Activity的Java文件

将CaptureActivity的Java代码复制并修改部分。

public class MyCaptureActivity extends AppCompatActivity {private CaptureManager capture;private DecoratedBarcodeView barcodeScannerView;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);barcodeScannerView = initializeContent();capture = new CaptureManager(this, barcodeScannerView);capture.initializeFromIntent(getIntent(), savedInstanceState);capture.decode();}/*** Override to use a different layout.** @return the DecoratedBarcodeView*/protected DecoratedBarcodeView initializeContent() {//此处修改//修改前setContentView(R.layout.zxing_capture);//修改前return (DecoratedBarcodeView)findViewById(R.id.zxing_barcode_scanner);setContentView(R.layout.activity_my_capture);return (DecoratedBarcodeView)findViewById(R.id.decoratedBarcodeView);}@Overrideprotected void onResume() {super.onResume();capture.onResume();}@Overrideprotected void onPause() {super.onPause();capture.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();capture.onDestroy();}@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);capture.onSaveInstanceState(outState);}@SuppressLint("MissingSuperCall")@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {capture.onRequestPermissionsResult(requestCode, permissions, grantResults);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {return barcodeScannerView.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);}
}

(3) 使用setCaptureActivity()方法取代CaptureActivity

button.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {IntentIntegrator intentIntegrator=new IntentIntegrator(MainActivity.this);//设置所需扫描的条码格式----可有多种,且可同时有条码和二维码intentIntegrator.setDesiredBarcodeFormats(IntentIntegrator.EAN_13,IntentIntegrator.UPC_A);intentIntegrator.setBeepEnabled(true);//扫描成功是否有提示音intentIntegrator.setPrompt("扫描");//提示字符串intentIntegrator.setCameraId(0);//设置摄像头,0为背摄,1为正摄intentIntegrator.setOrientationLocked(false);//是否方向锁定intentIntegrator.setBarcodeImageEnabled(true);//是否保存扫描成功的图片//使用自定义的Activity                intentIntegrator.setCaptureActivity(MyCaptureActivity.class);intentIntegrator.initiateScan();//启动扫描器}
});

相关文章:

Android扫码ZXing

1. 获取权限 请注意动态申请及重写申请结果返回方法。 <uses-permission android:name"android.permission.CAMERA"/> 2. 添加依赖 //Gradle Scripts -> build.gradle(Module:app) implementation com.google.zxing:core:3.4.1 implementation com.jour…...

求解Beamforming-SOCP(CVX求解)

时间&#xff1a;2023年11月23日14:00:16&#xff1a; 直接上代码&#xff08;辛苦两天才改出来的&#xff09; clear all; K 4; %user number N4; %base station number var1e-9; H []; %initialize H matrix for i1:Kh 1/sqrt(2*K)*mvnrnd(zeros(N,1),eye(N),1)1i/sqrt(2*…...

解决Vue项目的runtime-only转为runtime-compiler

我们在vue.config.js中添加上 runtimeCompiler: true,然后再将main.js入口文件中的Vue实例改为以下即可 //修改前 new Vue({router,store,render: (h) > h(App) }).$mount(#app) //修改后 new Vue({el:#app,router,store, components:{App}, template:<App/>})...

hash模式和history模式

在Vue Router中&#xff0c;有两种路由模式可供选择&#xff1a;hash模式和history模式。它们各自有一些优点和缺点&#xff0c;下面是它们的简要介绍&#xff1a; hash模式的原理是通过hashchange事件&#xff0c;通过监听hash变化来驱动界面变化。它的url中有 # 号 1、监听…...

聊聊logback的LevelFilter

序 本文主要研究一下logback的LevelFilter AbstractMatcherFilter ch/qos/logback/core/filter/AbstractMatcherFilter.java public abstract class AbstractMatcherFilter<E> extends Filter<E> {protected FilterReply onMatch FilterReply.NEUTRAL;protect…...

mysql 行转列 GROUP_CONCAT 试验

1.概要 很多时候需要用到行专列的方式做数据分析。比如对通讯数据的采集 数据采集结果如下&#xff1a; 变量值采集周期131251132272 我想要看的结果 变量1变量2采集周期351372 就是我想看到相关数据的周期变化情况。 2.试验 2.1创建数据如下&#xff08;表名 tb5&…...

HarmonyOS元服务开发实战—端云一体化开发

还记得我第一次接触arkui还是在22年的9月份&#xff0c;当时arkui还在一个比较初试的阶段。时隔一年再见方舟框架&#xff0c;它已经发生了令人瞩目的变化&#xff0c;不得不说华为方舟框架在更新迭代的速度已经遥遥领先。新的功能和性能优化让这个框架更加强大和灵活&#xff…...

【搭环境】装Python3.8 open3d

先装Python3.8 方法一试了找不到Python3.8的库&#xff0c;所以用方法二装上了。 Python3加入环境变量 更改Python默认指向 open3d需要Python3.6以上&#xff0c;最好用Ubuntu18版本&#xff0c;我用的16版本。。...

【C语言】深入解开指针(四)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 ✏️真正相信奇迹的家伙&#xff0c;本身和奇迹一样了不起啊&#xff01; 欢迎大家关注&#x1f50d;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;>希望看完我的文章对你有小小的帮助&am…...

AMEYA360:瑞萨面向高端工业传感器系统推出高精度模拟前端的32位RX MCU

全球半导体解决方案供应商瑞萨电子&#xff08;TSE&#xff1a;6723&#xff09;宣布面向高端工业传感器系统推出一款全新RX产品——RX23E-B&#xff0c;扩展32位微控制器&#xff08;MCU&#xff09;产品线。新产品作为广受欢迎的RX产品家族的一员&#xff0c;具有高精度模拟前…...

切面Aspect + 策略模式实现待办提醒功能

1.背景 产品需要实现一个待办提醒功能&#xff0c;就是核心业务发生变更即提醒业务员去处理相关业务。譬如&#xff1a;订单上传了支付凭证&#xff0c;那么就会提醒相关业务员去待办列表操办。 2.表设计 其实表设计主要是两张表sys_todo、sys_todo_detail 一张是待办核心表…...

SAP 调取http的x-www-form-urlencoded形式的接口

一、了解下x-www-form-urlencoded形式对于SAP来说有啥区别 简单来说&#xff0c; 1.raw格式就是标准的json格式&#xff1a;{“Name”:“John Smith”&#xff0c;“Age”: 23} 2.x-www格式是要转化一下的&#xff1a;NameJohnSmith&Age23 字段与字段相互连接要用 & 符…...

thingsboard3.6的mailConfigTemplateController错误

1、bug内容 使用3.6版本的tb代码进行打包生成boot的jar包,在启动的时候会报错mailConfigTemplateController bean初始化找不到文件路径。 Error creating bean with name mailConfigTemplateController defined in URL [jar:file:/D:/yuxinwei/AE/thingsboard/thingsboard-3…...

Go语言中获取IP

简介 在net包中提供了获取所有网卡的ip&#xff0c;一般不会用127.0.0.1,::1这样的本地回环地址&#xff0c;可以过滤掉&#xff0c;如果想要获取当前真正在使用的地址&#xff0c;得通过net.Dail去连一下才知道 获取ip地址 func main() {fmt.Println(getIpv4())fmt.Println…...

【Computer Vision Foundation】全球计算机视觉基金会论文网

计算机视觉基金会&#xff08;Computer Vision Foundation&#xff0c;简称CVF&#xff09;是一个致力于推动计算机视觉领域研究和发展的组织。以下是关于计算机视觉基金会的一些基本信息&#xff1a; 成立目的&#xff1a; CVF成立的目的是促进计算机视觉领域的学术研究、技术…...

计网(复习自用)

计算机网络 1.概述 1.1概念 含义 计算机网络&#xff1a;是一个将分散的。具有独立功能的计算机系统&#xff0c;通过通信设备和线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 简单点说&#xff0c;计算机网络是互联的&#xff0c;自治的计算机集…...

安徽省广德市选择云轴科技ZStack Cloud云平台建设县级智慧城市

信创是数字中国建设的重要组成部分&#xff0c;也是数字经济发展的关键推动力量。作为云基础软件企业&#xff0c;云轴科技ZStack产品矩阵全面覆盖数据中心云基础设施&#xff0c;ZStack信创云首批通过可信云《一云多芯IaaS平台能力要求》先进级&#xff0c;是其中唯一兼容四种…...

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 6

1、明明买了一个扫地机器人&#xff0c;可以通过以下指令控制机器人运动: F:向前走 10 个单位长度 L:原地左转 90 度 R:原地右转 90 度 机器人初始方向向右&#xff0c;需要按顺序执行以下那条指令&#xff0c;才能打扫完下图中的道路 A、F-L-F-R-F-F-R-F-L-F B、F-R-F-L-F-F…...

nuxt3项目修改端口号

nuxt的默认端口号是3000 一、修改开发环境端口号 方式一&#xff1a;使用环境变量配置,设置&#xff08;PORT 或 NUXT_PORT&#xff09; # .env PORT3001 #http://localhost:3001/ NITRO_PORT3001 #http://localhost:3001/ 方式二&#xff1a;nuxt.config.ts里配置…...

c语言中使用openssl对rsa私钥解密

单次加密数据的最大长度&#xff08;block_len&#xff09;&#xff0c;由RSA秘钥模长RSA_size()和填充模式有关 填充模式&#xff1a;RSA_PKCS1_PADDING&#xff0c; block_lenRSA_size() - 11填充模式&#xff1a;RSA_PKCS1_OAEP_PADDING&#xff0c;block_lenRSA_size() - 4…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...