前两个部分的地址是: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即可完成对历史记录的操作。这一部分相当来说比较简单,都是我们常用的功能