Android实战——Zxing实现二维码扫描

2023-11-18

Zxing实现二维码扫描


前言

本篇文章从初学者的角度出发,从一个不知道对二维码扫描怎么下手的工作者,需要一个简单的扫描功能的话,可以阅读该篇文章。作为Google开源框架Zxing,里面的文件很大,这里主要讲的是精简ZXing项目后只保留扫描功能的代码,可以缩小项目的大小,对于只要扫描功能的项目已经够用了。扫描后的结果,只要通过WebView百度一下就出来了。简单的说,可以把Zxing这个二维码扫描功能当做一个第三方服务来使用,本篇文章分为两部分,Zxing的集成和Zxing的使用


事先说明

由于二维码需要相机权限,为了适配安卓6.0新权限系统,需要我们手动申请权限,可参考博客点击打开链接

欢迎关注个人CSDN博客:Hensen_的博客:http://blog.csdn.net/qq_30379689


第一部分:Zxing的集成


步骤一:下载我们所需要的Zxing精简版,在Github上搜索Zxing,看到这条记录


进入并下载其jar包:



步骤二:复制到项目中,解压下载的包到ZXingProj/src/com/dtr目录下,复制这个zxing文件夹到我们的项目中,这个时候你会看到有几个红线错误:



接着我们一个个来修改这些红色错误,主要错误包括:导入的R包不是本项目的,存在R.raw和R.id和R.layout的资源找不到。首先我们把该放进去的资源先放进去,复制我们libs中的zxing.jar包到项目中,记得右键AddAsLibrary



复制下载的res的layout文件、res的values的ids文件、raw文件、res的drawable-xhdpi文件到我们项目的对应位置

          


接着就进入红线文件一个个导入,记得删除原先的R包,换成自己项目的R包



到这里我的项目所有红线已经没了,不知道你们呢?还有Result要导入的是带有zxing的包



第二部分:Zxing的使用


步骤一:在manifests中声明权限和Activity

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

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
        <activity
            android:name=".zxing.activity.CaptureActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar" />
        <activity
            android:name=".zxing.activity.ResultActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Black.NoTitleBar" />


步骤二:在代码中启动我们的二维码扫描页面

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(OpenZxingActivity.this, CaptureActivity.class));
            }
        });


步骤三:真机效果图

CaptureActivity:


ResultActivity:


步骤四:如果你想对Capture页面的界面进行修改可以制作一张图片替换drawable里面图片,这里我们只介绍对读取结果的介绍,我们打开ResultActivity文件:

public class ResultActivity extends Activity {

	private ImageView mResultImage;
	private TextView mResultText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_result);

		Bundle extras = getIntent().getExtras();

		mResultImage = (ImageView) findViewById(R.id.result_image);
		mResultText = (TextView) findViewById(R.id.result_text);

		if (null != extras) {
			int width = extras.getInt("width");
			int height = extras.getInt("height");

			LayoutParams lps = new LayoutParams(width, height);
			lps.topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 30, getResources().getDisplayMetrics());
			lps.leftMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());
			lps.rightMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, getResources().getDisplayMetrics());
			
			mResultImage.setLayoutParams(lps);

			String result = extras.getString("result");
			mResultText.setText(result);

			Bitmap barcode = null;
			byte[] compressedBitmap = extras.getByteArray(DecodeThread.BARCODE_BITMAP);
			if (compressedBitmap != null) {
				barcode = BitmapFactory.decodeByteArray(compressedBitmap, 0, compressedBitmap.length, null);
				// Mutable copy:
				barcode = barcode.copy(Bitmap.Config.RGB_565, true);
			}

			mResultImage.setImageBitmap(barcode);
		}
	}
}


我们大致可以明白,从CaptureActivity中传来一个Bundle的参数,并解析Bundle的宽和高,将其交给ImageView的参数,做为宽高,同时增加Margin属性,同时解析一个Byte数组,其中就是图片的文件的字节码,其中解析的result,则是我们需要的二维码结果:

String result = extras.getString("result");
mResultText.setText(result);







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android实战——Zxing实现二维码扫描 的相关文章

  • [Android Studio] 第5节 Intent页面跳转

    目录 目录 一 Intent是什么 二 使用步骤 1 调转demo 2 详解 3 页面数据传递 一 Intent是什么 Intent是Android中用于在不同组件 如活动 服务 广播接收器 之间传递数据和执行操作的对象 它可以用于启动活动
  • 【Android】Android ANR产生过程与分析方法

    前言 Android ANR问题一直是比较难解决的问题 一来它比较难以复现 二来复现后也不太好分析 这篇文章梳理一下ANR产生的过程以及出现ANR拿到日志文件如何定位原因 其实关于ANR线上监控也是比较棘手的 看了这篇文章我们再去看一些AN
  • 《0基础学安卓逆向》第1集:什么是安卓逆向及环境搭建

    1 安卓逆向是什么 安卓逆向是什么 目前百度知道都没有收录安卓逆向这个词条 大部分能搜索到的资料都是技术人员写的偏技术类的文章 往往充斥着代码和各类工具集合 非技术人员一看就比较懵逼 简单地来说 安卓逆向是对已经打包好的APP进行反编译 源
  • reactnative环境搭建-windows

    一 安装依赖 1 Node 以下为两种安装方式 1为基本安装 2为通过管理工具安装 1 按照教程步骤安装指定版本的node Node js 安装配置 注意 Node 的版本应大于等于 14 默认安装在C盘 如果自定义安装了其他盘需要配置环境
  • Android编译之常用配置及mk模板使用(汇总一)

    Android编译之常用配置及mk模板使用 引言 编译选项 1 eng 2 user 3 userdebug 模块编译常量宏 常用模块编译模板 1 编译一个APK 2 编译一个Java 共享库和静态库 3 编译一个Native 共享库和静态
  • 蓝牙App设计2:使用Android Studio制作一个蓝牙软件(包含:代码实现等)

    前言 蓝牙聊天App设计全部有三篇文章 一 UI界面设计 二 蓝牙搜索配对连接实现 三 蓝牙连接聊天 这篇文章是 二 蓝牙搜索配对连接实现 课程1 Android Studio小白安装教程 以及第一个Android项目案例 Hello Wo
  • Android Studio卸载以及安装教程

    手把手教学安卓安装 一 卸载教程 如果是第一次安装 直接看往下翻 1 先把Android Studio卸载2 将安装残余一起卸载 一定要卸载干净 否则在二次安装时会出现一大堆问题 a b c 好啦 到这里 所有的残余都已经删除干净 下面进入
  • 安装 Android Studio

    安装 Android Studio 只需轻松点击几下 您需要已下载 Android Studio Windows 如需在 Windows 系统中安装 Android Studio 请执行以下操作 启动您下载的 exe 文件 根据安装向导的指
  • 小米手机无法调试应用解决Installation failed with message Failed to establish session.

    小米手机性价比高 有些问题也很尖锐 比如我的5S用了黑科技 试验品 超声波指纹解锁 识别率就很低 每次解锁都要哈口气 真后悔 而且最近又遇到新问题 我的小米5S无法通过android studio调试应用 卖批啊 但即使这样也比蓝绿工程的O
  • 如何在android中的QR码中添加徽标

    我见过很少有中心带有公司徽标的二维码 是否可以在android中生成带有任何徽标的二维码 如果可能的话请解释一下这样做的方法 目前我正在使用 Zxing 来生成二维码 这是一个技巧 实际上你的 QR 码生成器 如果你使用 zxing 返回一
  • 如何将ZXING导入到android studio中?

    我用的是安卓工作室 我想在我的应用程序中导入 ZXING 我找到了很多文章并找到了以下站点 https github com zxing zxing 我下载了ZIP并解压 找到了一些教程 但好像并没有说的太详细 我需要导入什么 实现QRCo
  • ZXing - 使用通用类型 BarcodeWriter 需要 1 个类型参数 ZXing.NET.Mobile

    我一直在尝试使用 ZXing Net Mobile 和 ZXing Net Mobile Forms 生成 QRCode https github com Redth ZXing Net Mobile并遇到以下错误 严重性代码描述项目文件行
  • 使用zxing进行QR码编码和解码

    好吧 所以我要打消这里有人以前使用过 zxing 的可能性 我正在开发一个Java应用程序 它需要做的一件事是将数据的字节数组编码为QR码 然后稍后对其进行解码 这是我的编码器的示例 byte b 0x48 0x45 0x4C 0x4C 0
  • Android Studio (0.3.2) 和 ZXing

    我无法让 ZXing 在 Android Studio 中工作 我已经使用 Ant 生成了 core jar 文件 并且相同的 jar 使用 Eclipse 运行良好 现在我必须让它在 Android Studio 0 3 2 中工作 这是
  • 如何在黑莓手机中使用相机扫描图像?

    我已经开始了一个项目 我想在其中实现二维码扫描功能 举个例子 android 中的 ZXing 我想为黑莓操作系统 6 及更高版本实现 我想使用相机扫描实时图像 是否可以 如果是的话 那怎么可能呢 您必须使用条形码 API 它是针对 OS
  • ZXing条码扫描仪意图:设置DecodeHintType.ASSUME_GS1

    在我的应用程序中 我想扫描 GS1 128 条形码 并且需要从 ZXing 条形码扫描仪传递的 FNC1 字符 现在我只收到不带 FNC1 字符的纯文本 有没有办法通过 Intent 将 DecodeHintType ASSUME GS1
  • 使用 Mono Touch 在循环中使用 CGImage.ScreenImage 时出现内存问题

    我正在尝试创建一个应用程序来使用 Monotouch 和 Zxing 的 C 端口读取 QR 码 但遇到了内存问题 当应用程序处理捕获的屏幕帧时 应用程序会收到内存警告 然后关闭 我删除了对 Zxing 的调用 以追踪内存问题的根源 并且只
  • 如何在不安装条形码扫描仪应用程序的情况下使用ZXing库

    我一直在开发一个 Android 应用程序来扫描条形码和 QR 码并将结果发送到其他应用程序 HTTP 我已经通过互联网阅读了大部分文档 并在 stackoverflow 中阅读了它并使其正常工作 我可以在我的设备上运行独立的 zxing
  • Zxing扫描仪相机变焦

    我已经尝试解决这个问题3天了 但仍然没有找到答案 我想在通过 Zxing 扫描仪扫描二维码时向相机添加 ZOOM 构建 gradle implementation me dm7 barcodescanner zxing 1 9 8 Xml
  • 使用 ZXing 和 ZBar 的 GS1 应用程序标识符数据中缺少 AIM 符号标识符

    我正在尝试验证使用 ZXing 或 ZBar 扫描的 GS1 条形码 这GS1 一般规格 http www gs1 org docs gsmp barcodes GS1 General Specifications pdf7 8 中说 GS

随机推荐

  • EJBCA操作说明(二)java操作

    ejbca web界面操作 代码下载地址 初始化获得EJBCA实例 初始化EjbcaWS 获得EJBCA服务端Webservice实例 return public static EjbcaWS init EjbcaWS ejbcaWS nu
  • 单元测试 实体

    单元测试 实体 代码 Before public void setUp userVoTest new UserVo Test public void testEquals final boolean result userVoTest eq
  • C语言编译遇到的错误提示总结

    C语言编译遇到的错误提示总结 error1 expected asm or attribute before token error1 expected asm or attribute before token 解决方案 很有可能是你定义
  • Java常见面试题

    1 进程和线程的区别 1 进程是内存中运行的程序 是操作系统资源分配的基本单元 在windows操作系统中运行的每一个exe文件就是一个进程 每个进程都有独立的代码和数据空间 程序上下文 所以程序之间切换开销比较大 2 线程是处理器任务调度
  • stm32f407 bootloader程序制作 bootloader(基于rtthread3.3.0 sfud easyflash等库) 升级APP(基于rtthread的app)

    本位将介绍stm32f407vgt6 芯片制作bootloader程序 用作app的远程升级 一 硬件介绍 stm32f407vgt6 主频 166MHZ flash 1M SRAM 192K stm32f407vgt6 使用的phy芯片为
  • 微信小程序顶部栏图片随页面滚动渐变展示隐藏

    微信小程序顶部栏图片随页面滚动渐变展示隐藏 小程序顶部通栏 展示图片 随着页面滚动 开始渐变展标题记及纯色吸顶样式 主要使用了小程序中的scroll view组件 通过滚动时触发 bindscroll和滚动到顶部 bindscrolltou
  • LeetCode 67. 二进制求和

    题目链接 https leetcode cn problems add binary 思路如下 高精度加法 从低位到高位逐个对应相加 C 代码如下 class Solution public string addBinary string
  • 登录安全

    1 前端将用户名和密码rsa加密 后端解密 2 为防止登录数据被拦截而被复制登录 登录数据添加当前时间戳或加密后唯一字段 后端每一次登录成功后将时间戳或唯一字段加工后作为一个redis键名保存 值随便 缓存时间和登录有效时间一致 以保证登录
  • 【NLP】大模型综述来了!一文带你理清全球AI巨头的大模型进化史

    夕小瑶科技说 原创 作者 小戏 Python 如果自己是一个大模型的小白 第一眼看到 GPT PaLm LLaMA 这些单词的怪异组合会作何感想 假如再往深里入门 又看到 BERT BART RoBERTa ELMo 这些奇奇怪怪的词一个接
  • 三局两胜制下获得首胜后最后获胜的概率

    之前看NBA的时候 说拿下天王山之战的战队有83 3 差不多这个值 的概率拿下最后的胜利 当时感觉很奇怪 为什么这么接近5 6而不是3 4呢 然后自己算了一下 还真是 先说下为什么不是3 4的原因 3 4很容易算出来 1 2 1 2 可是后
  • 如何利用阿里云服务器快照策略为数据备份

    阿里云服务器快照 是一个很好的备份容灾工具 不了解的可以先了解一下 快照可以做什么 这是一种便捷高效的数据保护服务手段 可以对重要业务数据进行备份 来应对误操作 攻击 病毒等导致的数据丢失风险 比如前段时间的勒索病毒事件 假设你中招后所有数
  • Django下载图片接口

    import logging from django http import HttpResponse FileResponse from io import BytesIO from urllib parse import quote c
  • 还是得从代码角度看yolov5(1)

    train 参考文章 又是经典写到一半发现别人写的更好 基础函数 1 setattr setattr opt k v 将给定对象上的命名属性设置为指定值 等价于opt k v 2 getattr callback getattr logge
  • Pandas的学习(3.DataFrame的创建方法和三种索引方法(iloc、loc、values)以及切片)

    DataFrame DataFrame是一个 表格型 的数据结构 可以看做是 由Series组成的字典 共用同一个索引 DataFrame由按一定顺序排列的多列数据组成 设计初衷是将Series的使用场景从一维拓展到多维 DataFrame
  • 校验金额正则2--onchange触发校验

    用法 鼠标输入失去焦点的时候出发onchange属性调用js校验正则方法 正则校验reg1 test 不正确返回false 正确返回true 定义mm做判断 缺点 return直接退出了 如果需要重复操作不可取 或者不用return htm
  • PHP XAMPP配置PHP环境和Apache80端口被占用解决方案

    LAMP Linux Apache MySQL PHP 或WAMP Windows Apache MySQL PHP 是一门关于PHP架构网站的课程 它可以使用XAMPP软件 Apache MySQL PHP集成开发包 搭建PHP环境进行网
  • 从Docker到Kubernetes——K8s网络核心原理

    文章目录 Dokcer的网络模型 kubernetes网络核心原理 IP per Pod模型 Kubernetes网络插件flannel Dokcer的网络模型 Dokcer默认使用单主机的网络方案 它默认创建一个名为docker0的网桥
  • DateFormat类

    DateFormat类 DateFormat类用于将日期格式化为字符串或者将用特定格式显示的日期字符串转换成一个Date对象 DateFormat是一个抽象类 不能直接被实例化 提供了一系列静态方法来获取DateFormat类的实例对象 D
  • 一文读懂「Attention is All You Need」

    前言 2017 年中 有两篇类似同时也是笔者非常欣赏的论文 分别是 FaceBook 的Convolutional Sequence to Sequence Learning和 Google 的Attention is All You Ne
  • Android实战——Zxing实现二维码扫描

    Zxing实现二维码扫描 前言 本篇文章从初学者的角度出发 从一个不知道对二维码扫描怎么下手的工作者 需要一个简单的扫描功能的话 可以阅读该篇文章 作为Google开源框架Zxing 里面的文件很大 这里主要讲的是精简ZXing项目后只保留