二维码扫描 zxing源码分析(三)result、history部分

前两个部分的地址是:ZXING源码分析(一)CAMERA部分  、 zxing源码分析(二)decode部分

下面我们来看第三部分

result包下面有很多的类,其中的核心类是

com.google.zxing.client.android.result.ResultHandlerFactory:这个简单的工厂类,是整个result的所有的类的入口,我们就从这个类开始

ResultHandlerFactory:

这个类中有两个方法,分别是makeResultHandler()和parseResult()方法,makeResultHandler会调用parseResult方法,parseResult会

调用core类的核心方法,parseResult这个方法是用来解析扫描二维码得到的结果是属于那 种类型的数据,调用后返回ParsedResult类,

makeResultHandler方法就用到了getType()来判断扫描的结果是那一种类型的数据。

返回结果类型数据主要有以下几种

public enum ParsedResultType {
  ADDRESSBOOK,
  EMAIL_ADDRESS,   //网络
  PRODUCT,
  URI,              //url类型
  TEXT,
  GEO,
  TEL,            //电话
  SMS,
  CALENDAR,
  WIFI,
  ISBN,
}

类型数据解析完成之后又回到CaptureActivity的handleDecode方法完成对数据的处理。

因为parseResult()调用的是core.2.3.0的核心包的方法,下面我们再看看core.2.3.0的核心包中是怎么执行的

parseResult()方法中调用是 ResultParser,这是一个抽象的类,用的也是简单工厂的方法,不过写法不一样

下面看看它的核心属性和方法

 private static final ResultParser[] PARSERS = {
      new BookmarkDoCoMoResultParser(),
      new AddressBookDoCoMoResultParser(),
      new EmailDoCoMoResultParser(),
      new AddressBookAUResultParser(),
      new VCardResultParser(),
      new BizcardResultParser(),
      new VEventResultParser(),
      new EmailAddressResultParser(),
      new SMTPResultParser(),
      new TelResultParser(),
      new SMSMMSResultParser(),
      new SMSTOMMSTOResultParser(),
      new GeoResultParser(),
      new WifiResultParser(),
      new URLTOResultParser(),
      new URIResultParser(),
      new ISBNResultParser(),
      new ProductResultParser(),
      new ExpandedProductResultParser(),
  };
  public static ParsedResult parseResult(Result theResult) {
    for (ResultParser parser : PARSERS) {
      ParsedResult result = parser.parse(theResult);
      if (result != null) {
        return result;
      }
    }
    return new TextParsedResult(theResult.getText(), null);
  }
 ResultParser[] 定义的是一个所有的返回类的数组,然后循环这个数组,去分别调用不同的类,直到返回结果

不过看了 core.2.3.0的核心包方法,感觉应该把ParsedResult和ResultParser应该分别放在不同的包里,这样看着不会乱。

下面我们再看看它的history部分是怎么操作的

history界面主要是对数据库的操作,把得到的数据保存到barcode_scanner_history.db数据库中的history表中涉及到的类

com.google.zxing.client.android.history.DBHelper 数据库类,建表操作

com.google.zxing.client.android.history.HistoryActivity 外部调用的,用于显示页面

com.google.zxing.client.android.history.HistoryManager ,用来对历史进行增删改查操作,控制数据库

使用HistoryManager即可完成对历史记录的操作。这一部分相当来说比较简单,都是我们常用的功能

时间: 2024-11-06 05:39:29

二维码扫描 zxing源码分析(三)result、history部分的相关文章

【转】Android手机客户端关于二维码扫描的源码--不错

原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修复了中文乱码. 融合了ZXing代码(使用其中的相机管理功能). 一. 使用开源ZXing扫描的缺点 1.原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做 2.有效扫描区域不好控制,可能是我自己技术不成熟,没找到好方法 3.ZXing是Java写的,对二维码的解析效率没有

二维码zxing源码分析(四)wifi部分

前三个部分的地址是:ZXING源码分析(一)CAMERA部分  . zxing源码分析(二)decode部分.zxing源码分析(三)result.history部分 前面三篇文章基本上已经把zxing的核心源码看的差不多了,现在我们在分析它所包含的功能的部分,其实history也是属于这一部分的,但是放在第三篇说了 核心类: com.google.zxing.client.android.wifi.WifiConfigManager wifi管理类,通过它用解析后的结果进行管理 com.goo

条码扫描二维码扫描—ZXing android 改进版本

看了Vurtexゞ. 文章<[Android实例] 条码扫描二维码扫描——ZXing android 源码简化 (附:支持中文) >的基础上对代码进行了修改 1.增加了将代码嵌套入自己工程后传值的办法(初学,如果有更好的方法也希望告诉我,先谢谢了) 2.扫码界面进行了处理(初步实现了现有某些软件的样子,至于长的像谁就不说了) //画四个角的代码<br>paint.setColor(frameColor); canvas.drawRect(15 + frame.left, 15 +

二维码扫描ZXing简化

最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用. 界面图Preview:图是用stg+vnc做的,看起来比较卡,大家将就着看. 下载地址:http://pan.baidu.com/s/1gdxj5sv

spring深入理解二(关于容器工作源码)

spring基本工作原理如下: 1.查找bean配置文件 2.加载bean配置文件并解析生成中间表示BeanDefinition 3.注册beanDefinition 4.如果是单例或lazy-init=false,则直接生成bean spring将 1.查找bean配置文件 2.加载bean配置文件并解析生成中间表示BeanDefinition 3.注册beanDefinition 这三部分开,可以提供更多的定制给用户. spring将配置文件之类的文件资源抽象成一个Resource,封装了g

二人牛牛机器人构造源码

本次为大家分析二人牛牛机器人构造源码如下:#include "StdAfx.h"#include "AndroidServiceManager.h"#include "AndroidUserItemSink.h"////////////////////////////////////////////////////////////////////////////构造函数CGameServiceManager::CGameServiceManage

千创伟业二二复制公排系统源码开发

千创伟业二二复制公排系统源码开发,开发系统找:陈经理136-4273-5391 千创伟业系统,千创伟业模式,千创伟业平台开发,千创伟业开发系统,千创伟业软件开发.本文章是做系统开发咨询的,并非官方平台运营商,玩平台者勿扰!谢谢配合! 这是一个移动互联网时代,也是一种跨界打劫的时代,这是一种2G手机还舍不得丢,5G已经悄然兴起的时代,这是一个海盗嘉年华的时代,今天你还在墨守成规,他却直接跨界打劫你的口袋,你却浑然不知的时代,今天的你不改变自己的思维,你一定被移动互联网思维所改变.先后排列不同,价值

Android源码和内核源码的下载,编译和执行

笔者依据罗升阳老师的<Android 系统源码情景分析>一书,尝试下载,编译和执行Android源码和内核源码.但可能是软件源"被墙"或版本号更新的原因.期间遇到诸多问题.笔者求助于强大的度娘和谷歌.最终编译成功,现将改动的步骤记录例如以下: 一.下载相关的工具包和依赖包 1.git工具的下载.不多说 2.Java SDK的下载(參考网址:http://blog.csdn.net/zjclugger/article/details/11762085) 此处建议下载jdk1.

【源码】LinkedList源码剖析

//----------------------------------------------------------- 转载请注明出处:http://blog.csdn.net/chdjj by Rowandjj 2014/8/8 //---------------------------------------------------------- 注:以下源码基于jdk1.7.0_11 上一篇我们分析了ArrayList,今天我们再来看下LinkedList. 首先上一幅框架图: Lin