下面我们来看第三部分
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即可完成对历史记录的操作。这一部分相当来说比较简单,都是我们常用的功能
 

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

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

    原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修 ...

  2. arcgis api 4.x for js 自定义 Draw 绘制手绘面以及手绘线,只针对二维视图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...

  3. Android快速实现二维码扫描--Zxing

    Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求 ...

  4. zxing源码分析——QR码部分

    Android应用横竖屏切换 zxing源码分析——DataMatrix码部分 zxing源码分析——QR码部分 2013-07-10 17:16:03|  分类: 默认分类 |  标签: |字号大中 ...

  5. 二维码zxing源码分析(五)精简代码

    由于工作的需要,我并不是需要二维码扫描的所有的功能,我只是需要扫一扫,并显示出来图片和url就行,于是我们就要精简代码了,源码已经分析完了,精简起来就方便多了,源码分析请看 二维码zxing源码分析( ...

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

    前三个部分的地址是:ZXING源码分析(一)CAMERA部分  . zxing源码分析(二)decode部分.zxing源码分析(三)result.history部分 前面三篇文章基本上已经把zxin ...

  7. 二维码zxing源码分析(二)decode部分

           在上一篇博客中分析了zxing怎么打开摄像头,并且扫描结果,那么扫描之后的数据呢,是不是就要解析了呢,那我们看一下zxing怎么解析这个数据的.       上一篇博客地址ZXING源码 ...

  8. 二维码扫描ZXing简化

    最近项目中有需要用到二维码扫描功能,于是查了相关资料,也没有过多地研究ZXing源码,只是有了最简单的功能,因为下载大牛的demo已经完全实现了功能,只是对其中的扫描线做了更改,需要的朋友可以直接使用 ...

  9. 5.2 Spring5源码--Spring AOP源码分析二

    目标: 1. 什么是AOP, 什么是AspectJ 2. 什么是Spring AOP 3. Spring AOP注解版实现原理 4. Spring AOP切面原理解析 一. 认识AOP及其使用 详见博 ...

随机推荐

  1. 【转】如何分析解决Android ANR

    来自: http://blog.csdn.net/tjy1985/article/details/6777346 http://blog.csdn.net/tjy1985/article/detail ...

  2. 【转】struct和typedef struct

    原文:http://www.cnblogs.com/qyaizs/articles/2039101.html 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用type ...

  3. 泛型Dictionary的用法详解

    泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的 ...

  4. Android中显示网页的多种方式

    在android中显示页面主要有两种方式,一种是在Activity里面直接显示网页,另一种是调用浏览器显示网页.方式不同,使用的方法也不同,下面我们分别讲解. 一.在Activity里面直接显示网页 ...

  5. Java中this,static,super及finalkeyword和代码块

    this: 能够使用this表示类中的属性------this.name=name 能够使用this强调调用的是本类的方法 能够使用this调用本类的构造方法------this();调用本类中无參构 ...

  6. 如何进行js动态生成option?如何实现二级连动?

    何为二级连动? 首先要明白什么是二级连动!顾名思义,就是一个动,另外一个也跟着一起动 看下面的例子: 这里有一个“市级”的选择列表框,还有一个“县级”的选择列表框,如果“市级”的选择列表框中的值发现变 ...

  7. 教程:如何减小iOS应用程序的大小?

    本文译自:Reducing the size of my App Q: 怎样才能让我的程序安装包小一点,让程序的下载和安装更快速? A: 本文收集了一些减小程序安装包大小的相关技巧(当第一次下载和安装 ...

  8. android studio 预览保持,因为是SDK版本过高,可以点击小图标机器人修改SDK版本号。

    Exception raised during rendering: com/android/util/PropertiesMap

  9. Google搜索技巧-从入门到精通(从此学习进步、工作顺心)

    转载:http://www.blogbus.com/koudaizhi-logs/55687286.html 一  GOOGLE简介 Google (www.google.com)是一个搜寻引擎,由某 ...

  10. 如何制作gif动画,丰富自己的博客?

    不久前在博客园上看到有个哥们发表了一篇博客,其中使用了大量的动态的gif动画,感觉这种方法对于丰富博客内容非常有帮助,然后在网上搜索了一些关于制作gif动画的资料.我的方法不一定好,在这里仅作为抛砖引 ...