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

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

前面三篇文章基本上已经把zxing的核心源码看的差不多了,现在我们在分析它所包含的功能的部分,其实history也是属于这一部分的,但是放在第三篇说了

核心类:

com.google.zxing.client.android.wifi.WifiConfigManager wifi管理类,通过它用解析后的结果进行管理

com.google.zxing.client.android.wifi.NetworkType 网络类型分类

com.google.zxing.client.result.WifiResultParser core中的方法,对扫描结果是wifi进行的解析

com.google.zxing.client.result.WifiParsedResult  core中的方法,用来存储解析后的结果

WifiConfigManager 包含了以下几个方法

changeNetworkCommon 用来处理没有密码的 wifi连接

changeNetworkWEP  用来处理WEP的 wifi连接

changeNetworkWPA 用来处理WPA的 wifi连接

本身它继承了AsyncTask方法,doInBackground()处理了连接那一个类型了wifi,会根据解析的结果得到wifi的类型,然后去连接,代码如下:

 String networkTypeString = theWifiResult.getNetworkEncryption();
    NetworkType networkType;
    try {
      networkType = NetworkType.forIntentValue(networkTypeString);
    } catch (IllegalArgumentException ignored) {
      Log.w(TAG, "Bad network type; see NetworkType values: " + networkTypeString);
      return null;
    }
    if (networkType == NetworkType.NO_PASSWORD) {
      changeNetworkUnEncrypted(wifiManager, theWifiResult);
    } else {
      String password = theWifiResult.getPassword();
      if (password != null && !password.isEmpty()) {
        if (networkType == NetworkType.WEP) {
          changeNetworkWEP(wifiManager, theWifiResult);
        } else if (networkType == NetworkType.WPA) {
          changeNetworkWPA(wifiManager, theWifiResult);
        }
      }
    }

theWifiResult.getNetworkEncryption(); 就是得到wifi的类型的,这个方法的获取是通过核心包Core中WifiResultParser的parser解析后返回WifiParsedResult类中包含的

 public WifiParsedResult parse(Result result) {
    String rawText = getMassagedText(result);
    if (!rawText.startsWith("WIFI:")) {
      return null;
    }
    String ssid = matchSinglePrefixedField("S:", rawText, ‘;‘, false);
    if (ssid == null || ssid.isEmpty()) {
      return null;
    }
    String pass = matchSinglePrefixedField("P:", rawText, ‘;‘, false);
    String type = matchSinglePrefixedField("T:", rawText, ‘;‘, false);
    if (type == null) {
      type = "nopass";
    }
    boolean hidden = Boolean.parseBoolean(matchSinglePrefixedField("H:", rawText, ‘;‘, false));
    return new WifiParsedResult(type, ssid, pass, hidden);
  }

到此,便完成了wifi的解析

上面所说是内部解析wifi的数据,那页面上是怎么展示的呢,这还要回到CaptureActivity的handleDecode方法,因为这个就是对所有类型的数据的结果进行展示的

handleDecode会调用handleDecodeInternally进行处理,画个图大家可以参考

时间: 2024-08-27 11:17:09

二维码zxing源码分析(四)wifi部分的相关文章

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

前两个部分的地址是:ZXING源码分析(一)CAMERA部分  . zxing源码分析(二)decode部分 下面我们来看第三部分 result包下面有很多的类,其中的核心类是 com.google.zxing.client.android.result.ResultHandlerFactory:这个简单的工厂类,是整个result的所有的类的入口,我们就从这个类开始 ResultHandlerFactory: 这个类中有两个方法,分别是makeResultHandler()和parseResu

Android二维码扫描源码

Android二维码扫描源码 支持平台:Android   运行环境:Eclipse   开发语言:Java 下载地址:http://t.cn/R7HfKOY 源码简介 源码运行截图                                                   

二人牛牛完整源码下载

这里给大家分享二人牛牛源码如下:#include "StdAfx.h"#include "GameLogic.h"////////////////////////////////////////////////////////////////////////////扑克数据BYTE CGameLogic::m_cbCardListData[54]={    0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,

方维 o2o app源码出售

方维o2oapp源码出售 1.本人官方5万购买,现把方维o2o app 源码低价出售:一口价1万元 2.包括网站源码本地搭建包成功提供指导 3.包括网站说明文档,不包含app说明文档: QQ642161679 旺旺:liulf8877 微信: liulingfuwx 演示网站: http://www.cc8888.cn

微信开发H5十二人牛牛出租源码下载搭建

微信开发H5十二人牛牛出租源码下载搭建h5.fanshubbs.com联系Q1687054422不同于传统的手游商店下载模式,HTML5 手机网页游戏是可以直接运行在微信内置的浏览器里. 先上图,感知一下具体样子: 而我想分享的是我们在具体开发实现过程中,基于微信的Html5 WebApp需要去克服的一些坑:这个小游戏的基本规则是:限定用户每天刮书次数是2次 (自由刮一次和分享后再刮一次),每天都可刮奖为此,我们希望实现的思路首先是限定在只能使用微信中玩,实现代码如下:if (!HttpCont

MINA2 源码学习--源码结构梳理

一.mina的整体框架结构及案例: 1.整体结构图: 简述:以上是一张来自网上比较经典的图,整体上揭示了mina的结构,其中IoService包含客户端IoConnector和服务端IoAcceptor两部分.即无论是客户端还是服务端都是这个结构.IoService封装了网络传输层(TCP和UDP),而IoFilterChain中mina自带的filter做了一些基本的操作之外,支持扩展.经过FilterChain之后最终调用IoHandler,IoHandler是具体实现业务逻辑的处理接口,具

【MySQL源码】源码安装和启动mysql

--[MySQL源码]源码安装和启动mysql --------------------------------------2014/08/19 本机环境:ubuntu12.04,fedora-17 MYSQL版本:5.5.28 CMAKE版本:2.8.9 一.下载最新版本的cmake,解压后编译安装. sudo ./configure --prefix=/usr/local/etc/cmake-2.8.9 sudo make sudo make installsudo ln -s /usr/l

[Android 源码] Android源码下载

Android源码下载 为了能够顺利的下载Android的源码,同时也为了避免在网络上再次搜寻如何下载源码的麻烦,我把下载过程记录在这篇文档中. 官网中也有详细的介绍: http://source.android.com/source/downloading.html 1.环境设置问题 系统:Ubuntu 12.04 LTS 64bit 所需工具:curl, git-core, repo(repo的问题在后面有讲到)... 2.硬盘空间问题 首先,在下载源码之前,最首要的事请就是保证有足够的硬盘

ECO源码|GEC源码|挖矿源码|eco系统|gec程序

ECO源码|GEC源码|挖矿源码|eco系统|gec程序在最近一年的时间里,各种国产的资金盘疯狂的出现,其实看见有很多做的比较成功的,比如eco|gec都做得比较好 !在今年1月的时候,当时我也有冲动想尝试着做一个虚拟币的平台.与自己不是程序员所以对这个软件是一窍不通!但是就想要从网上买一个源码?在网上看了很多,一不小心就是两三万一个源码,也有几千块钱的源码!由于自己刚毕业所以就套了2000元在网上买了一个虚拟币的源码!在互站网里面买的,这是没过几天我在站长资源里面看见了一个十块钱的源码!当时抱