一扫天下——ZXing使用全解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一扫天下——ZXing使用全解析二维码现在已经烂App了,不管什么App,没有二维码就好像低人一等了。所以,在自己的项目中集成二维码功能还是非常有必要的。网上很多都是基于ZXing2.3的,但是现在都3.1了,改了很多bug,也进行了很多优化,最好按本文弄一下。

一扫天下——ZXing使用全解析

二维码现在已经烂App了,不管什么App,没有二维码就好像低人一等了。所以,在自己的项目中集成二维码功能还是非常有必要的。

网上很多都是基于ZXing2.3的,但是现在都3.1了,改了很多bug,也进行了很多优化,最好按本文弄一下。

参拜ZXing

ZXing的github地址:
https://github.com/zxing/zxing

通过git clone git@github.com:zxing/zxing.git 命令我们可以把整个ZXing项目拉取下来。

这里写图片描述

然而这并没有什么卵用。

因为ZXing的项目是非常庞大的,功能也非常多,但是我们不需要这么多,我们只关心Android部分的。

获得ZXing的祝福之jar

在使用ZXing之前,我们需要先编译它的jar包,我们可以看见源代码目录中有一个core的目录,我们可以把这个文件夹导入eclipse作为一个java工程。最后通过export导出一个jar包。

获得ZXing核心功能

我们需要把核心的扫码、解码功能抽取出来,这一步,网上已经有很多人做过了,只是大部分都是基于第一个抽ZXing的人,而那个是基于ZXing1.5、2.3的,所以,记得要进行Update哦。

那么我们如何获得最新的ZXing代码呢,很简单,找一个旧的,然后把最新的代码一个个copy过去替换就好了,当然,还是会有一些问题,不过一步步解决就可以了,都不是很大的问题。

饭来张口

这里为大家也提供一个封装好的最新的ZXing Lib:

https://github.com/xuyisheng/ZXingLib

基于ZXing3.1封装,包含了最新的jar包和代码。

解析

CaptureActivity

ZXing暴露的调用Activity。在handleDecode方法中对扫码成功后的动作作处理。

ViewfinderView

ZXing扫码窗口的绘制,原始的ZXing使用这种方式去绘制,在上面提供的开源库中,作者将扫描框的绘制直接抽取到了XML文件中,这样修改起来更加方便了。

CameraConfigurationManager

修改横竖屏、处理变形效果的核心类。

在public void setDesiredCameraParameters(Camera camera, boolean safeMode)方法中(读取配置设置相机的对焦模式、闪光灯模式等等),可以将扫描改为竖屏:

即:
在方法最后加上:

/** 设置相机预览为竖屏 */
camera.setDisplayOrientation(90);

即可。

在public void initFromCameraParameters(Camera camera)方法中(计算了屏幕分辨率和当前最适合的相机像素),我们可以对修改为竖屏扫码后,由于像素信息点没有对调造成图像扭曲变形进行修改。

即:

在Log.d(TAG, “Screen resolution: ” + screenResolution);后加上如下的代码:

/** 因为换成了竖屏显示,所以不替换屏幕宽高得出的预览图是变形的 */
Point screenResolutionForCamera = new Point();
screenResolutionForCamera.x = screenResolution.x;
screenResolutionForCamera.y = screenResolution.y;

if (screenResolution.x < screenResolution.y) {
    screenResolutionForCamera.x = screenResolution.y;
    screenResolutionForCamera.y = screenResolution.x;
}

最后,将screenResolution替换为screenResolutionForCamera:

cameraResolution = findBestPreviewSizeValue(parameters, screenResolutionForCamera);

DecodeHandler.decode

ZXing解码的核心类

CaptureActivityHandler

当DecodeHandler.decode完成解码后,系统会向CaptureActivityHandler发消息。如果编码成功则调用CaptureActivity.handleDecode方法对扫描到的结果进行分类处理。

最后

本文的Github中已经包含了前面所提到的所有修改(横竖屏、扭曲变形),用最新的ZXing代码进行了update,同时提供了编码、解码方法,并且将扫码界面抽取成XML(感谢开源作者),方便拓展。

https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib
https://github.com/xuyisheng/ZXingLib

重要的东西发三遍。

以上。

目录
相关文章
|
消息中间件 算法 架构师
不愧是Github疯传的腾讯Java进阶笔记,总结太全了
移动互联网时代,IT 系统变得愈加复杂,对我们程序员的要求也是越来越高,技术不断更新,我们还不能停止学习,停下来了就会被打上一个‘不合格的程序员’的标签,如何成为一位「不那么差」的程序员?「不那么差」的程序员又需要掌握一些什么知识呢?这篇文章就与大家聊一聊这个话题。 以下内容仅代表我从业以来所积累的相关经验,不对不全的地方还请大家海涵,下面我会从硬技能、软实力这些方面尽量阐述我所认为的 “不那么差的程序员” 应当做到哪些技能。
|
设计模式 架构师 算法
Android程序员必备!Android开发热门前沿知识,重难点整理
Android程序员必备!Android开发热门前沿知识,重难点整理
Android程序员必备!Android开发热门前沿知识,重难点整理
|
安全 关系型数据库 MySQL
一些杂谈
一些个人的经验和技巧
|
JSON 数据安全/隐私保护 数据格式
csdn竟然还有这种神器!后悔没有早点知道!超好用的csdn插件,别再犹豫了,赶快入手吧!
csdn竟然还有这种神器!后悔没有早点知道!超好用的csdn插件,别再犹豫了,赶快入手吧!
263 0
csdn竟然还有这种神器!后悔没有早点知道!超好用的csdn插件,别再犹豫了,赶快入手吧!
|
Java Android开发 数据格式
阅读手札:《Android开发艺术探索》(二)
在 《阅读手札:《Android开发艺术探索》(一)》中主要介绍了Activity的生命周期以及异常处理、启动模式、意图过滤器。本篇文章主要介绍的是《Android开发艺术探索》的第二章 IPC机制 个人评语:第二章的内容非常多(第二章近90页内容),内容有IPC机制基本概念;序列化Serializable、Parcelable;Binder;实现IPC的多种方式;Binder连接池内容非常多,但还是要耐着性子分析完。
1484 0
|
Android开发
阅读手札:《Android开发艺术探索》(一)
《Android开发艺术探索》这本书在Android开发界内可谓口碑极佳,他的作者任玉刚在百度担任Android资深开发工程师。我的一个初中朋友现在深圳百度做Android研发,上周去深圳找他玩的时候碰巧在他电脑桌上看到了这本书,他谈到这本书内容多、有深度且知识点非常系统值得反复阅读。
1375 0
"软件随想录" 读书笔记
人员管理: 三种方法: 军事化管理方法, 经济利益驱动法, 认同法. 军事化管理方法不行. 经济利益驱动法也不行. 认同法, 其中一条建议是一起干活的人一起吃饭. 但这种做法比较困难. 设计的作用 寸土必争, 不放过任何注意细节, 做微小的改进.
1293 0