【ACCESS精品源码栏目提醒】:网学会员--在 ACCESS精品源码编辑为广大网友搜集整理了:个人Android学习笔记 - 其它资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
WIFI 学习内容目录WIFI 模块学习.......................................................................................................2 WIFI 模块图......................................................................................................2 开发时用到 WIFI 时,需要添加的权限..................................................................3 一般使用流程.....................................................................................................3Android Package 中 Setting 部分代码学习笔记......................................................5 WIFI 部分.........................................................................................................5 WPS 相关知识介绍............................................................................................7 Android4.0 新增功能 Wi-Fi Direct....................................................................9 VPN 技术及
源码 Settings 部分学习...................................................................11Android Framework 中 wifi 部分代码学习...........................................................14 这周主要的学习内容是 Android
源码中 Wifi 相关内容,主要是 framework 和package 俩个包中的
源码部分,学习的方法主要是通过对照 android 手机上 wifi 相关的功能,查找到
源码对应的位置,并学习相关的实现。
对于遇到不是太熟悉的功能,如wps,wifi-direct,vpn 等功能,其中 wifi-direct 是 4.0 新增的功能,自己的手机上没有对应功能,主要通过在网上查询相关内容进行学习。
WIFI 模块学习WIFI 模块图 WirelessSettings WifiSettings AccessPointDialog WifiEnabler WifiLayer WifiManager WifiStateTracker AIDL WifiService WifiMonitor WifiNatvie JAVA VM JNI android_net_wifi_wifi wifi SOCKET wpa_supplicant 开发时用到 WIFI 时,需要添加的权限 ltuses-permissionandroid:namequotandroid.permission.
ACCESS_NETWORK_STATEquot/gt ltuses-permissionandroid:namequotandroid.permission.
ACCESS_WIFI_STATEquot/gt ltuses-permissionandroid:namequotandroid.permission.CHANGE_WIFI_STATEquot/gt ltuses-permissionandroid:namequotandroid.permission._NETWORK_STATEquot/gt 一般使用流程 初始化 在从系统服务获取 WifiService 后,WifiStateTracker 会创建 WifiMonitor 接收来自底层的事件WifiService 和 WifiMonitor 是整 个模块的核心。
WifiService 负责启动关闭 wpa_supplicant、启动关闭 WifiMonitor 监视线程 和把命令下发给 wpa_supplicant而 WifiMonitor 则负责从 wpa_supplicant 接收事件通知。
连接 AP 1.使能 WIFI WirelessSettings 在初始化的时候配置了由 WifiEnabler 来处理 Wifi 按钮 ,当用户按下 Wifi 按钮后 Android 会调用 WifiEnabler 的 onPreferenceChange 再由WifiEnabler 调用 WifiManager 的 setWifiEnabled 接口函数通过 AIDL实际调用的是WifiService 的 setWifiEnabled 函数WifiService 接着向自身发送一条MESSAGE_ENABLE_WIFI 消息在 处理该消息的代码中做真正的使能工作:首先装载 WIFI内核模块该模块的位置硬编码为 quot/system/lib/modules/wlan.koquot 然 后 启 动wpa_supplicant 配 置 文 件 硬 编 码 为 quot/data/misc/wifi/wpa_supplicant.confquot 再通过 WifiStateTracker 来启动 WifiMonitor 中的监视 线程。
当使能成功后会广播发送WIFI_STATE_CHANGED_ACTION 这个 Intent 通知外界 WIFI 已 经 成 功 使 能 了 。
WifiEnabler 创 建 的 时 候 就 会 向 Android 注 册 接 收WIFI_STATE_CHANGED_ACTION因此它会收到该 Intent从而开始扫描。
2. 查找 AP 扫描的入口函数是 WifiService 的 startScan它其实也就是往 wpa_supplicant 发送 SCAN 命 令。
当 wpa_supplicant 处理完 SCAN 命令后它会向控制通道发送事件通知扫描完成从而 wifi_wait_for_event 函数会接收到该事件由此 WifiMonitor 中的MonitorThread 会被执行来 出来这个事件 WifiStateTracker 则接着广播发送SCAN_RESULTS_AVAILABLE_ACTION 这个 Intent 。
WifiLayer 注册了接收SCAN_RESULTS_AVAILABLE_ACTION 这个 Intent所以它的相关 处理函数handleScanResultsAvailable 会被调用在该函数中先会去拿到 SCAN 的结果最终是往wpa_supplicant 发送 SCAN_RESULT 命令并读取返回值来实现的 ,对每一个扫描返回的 APWifiLayer 会调用 WifiSettings 的 onAccessPointSetChanged 函数 从而最终把该 AP 加到 GUI 显示列表中。
3. 配置 AP 参数 当用户在 WifiSettings 界面上选择了一个 AP 后会显示配置 AP 参数的一个对话框用于配置 AP 参数。
4. 连接 当用户在 AcessPointDialog 中选择好加密方式和输入密钥之后再点击连接按钮Android 就会去连接这个 AP。
WifiLayer 会先检测这个 AP 是不是之前被配置过这个是通过向 wpa_supplicant 发送 LIST_NETWORK 命令并且比较返回值来实现的 如果wpa_supplicant 没有这个 AP 的配置信息 则会向 wpa_supplicant 发送ADD_NETWORK 命令来添加该 AP ADD_NETWORK 命 令 会 返 回 一 个 ID WifiLayer 再 用 这 个 返 回 的 ID 作 为 参 数 向 wpa_supplicant 发送ENABLE_NETWORK 命令从而让 wpa_supplicant 去连接该 AP。
5. 配置 IP 地址 当 wpa_supplicant 成功连接上 AP 之后它会向控制通道发送事件通知连接上 AP了从而 wifi_wait_for_event 函数会接收到该事件由此 WifiMonitor 中的MonitorThread 会被执行来 出来这个事件 WifiMonitor 再调用 WifiStateTracker 的notifyStateChangeWifiStateTracker 则接着会往自身 发送 EVENT_DHCP_START 消息来启动 DHCP 去获取 IP 地址 然后再广播发送NETWORK_STATE_CHANGED_ACTION 这个 Intent ,WifiLayer 注册了接收NETWORK_STATE_CHANGED_ACTION 这个 Intent所以它的相关 处理函数handleNetworkStateChanged 会被调用当 DHCP 拿到 IP 地址之后会再发送 EVENT_DHCP_SUCCEEDED 消息 WifiLayer 处理 EVENT_DHCP_SUCCEEDED 消 息 会 再 次 广 播 发 送NETWORK_STATE_CHANGED_ACTION 这个 Intent这次带上完整的 IP 地址信息。
至此为止整个连接过程完成。
Android Package 中 Setting 部分代码学习笔记 WIFI 部分 1.WifiSettings Wifi 设置界面 主要方法 理解onActivityCreated Actiivity 创建的时候调用,通过判断当前 wifi 相关的状态, 完成最初的设置,通过系统服务获得 WifiManageronCreateOptionsMenu 三个 OptionMenu,分别为“扫描”,“添加网络”和“高级” “扫描”在 wifi 可用的前提下,调用 Scanner.forceScan 进行扫描 “添加网络”在 wifi 可用的前提下,调用 onAddNetworkPressed,添加网络 “高级”转到“高级设置界面”onSaveInstanceState 保存某个网络节点的状态信息OnCreateContextMenu 如果长按的是 AccessPoint,则弹出对 AccessPoint 设置 的菜单,包括“连接到网络”,“不保存网络”,“修改网络”。
“连接到网络”先判断是否已经保存在手机上,如果是已经保 存过的直接连接,调用 WifiManager 的 connectNetwork 方法,如果是加密的网络,则也可直接调用 connectNetwork 连接,其他情况则调用 showConfigUi先进行配置。
“不保存网络”调用 WifiManager 的 forgetNetwork 方法 “修改网络”调用 showConfigUi进行配置onPreferenceTreeClick 点击 AccessPoint 触发的事件,处理流程类似 OnCreateContextMenuWifiDialog 通过创建一个 WifiDialog 用于显示配置和连接某个选中的 AccessPointupdateAccessPoints 根据 wifi 状态,更新相应的显示。
ConstructAccessPoints 获得接入点列表,已经保存过的接入点的信息存放在 WifiConfiguration 中,通过 WifiManager 的 getConfiguredNetworks获得,再通过 WifiManager 的 getScanResults方法,获得扫描得到的接入点信息。
HandleEvent 处理各种 Action 2.AdvancedWifiSettings wifi 高级设置 主要方法 理解initPreferences 初始化设置,包括每个控制的最初设置,如“休眠策略”,“检查 开放网络”,“Wi-Fi 频带”,“不采用状况差的连接”等。
updateSleepPolicySummar 设置 summary 显示的休眠策略yrefreshWifiInfo 通过 WifiManager 的 getConnectionInfo 方法,获得 mac 地 址和 ip 地址的信息,显示出来 3.WifiApDialog wifi 接入点对话框 主要方法 理解getSecurityTypeIndex 获得接入点加密类型, WPA_INDEX,WPA2_INDEX,OPEN_INDEXgetConfig 获得接入点配置信息,主要获取改 AP 的 SSID 和密 码onCreate Dialog 创建时调用,配置 dialog 的基本信息ShowSecurityFields 判定是否显示密码区域,开放网络不需要密码validate 判断是否可连接,只有在条件符合时候”连接”按钮 才有效。
4.WifiApEnabler 开启 wifi 主要方法 理解enableWifiCheckBox 通过检查飞行模式状态,判断 wifi 是否可以 打开,默认设置在飞行模式开启的情况下, 打开 wifi 的 checkbox 是不可用的,但根据不 同厂家自己定制handleWifiApStateChanged 处理 wifi 在状态变化的时候的各种情况updateTetherState 更新 Tether 状态,判断 wifi 状态,显示提示 信息。
tethering 技术tethering 即电脑连接 3G 手机作为 3G 调制解调器使用,用 3G 网络上网 5. AccessPoint 接入点信息 主要方法 理解getSecurityWifiConfigurati 获得已经保存的热点的安全属性on config SECURITY_WEPSECURITY_PSKSECURITY_EAP 或 SECURITY_NONEgetSecurityScanResult 获得扫描到的热点的安全属性result SECURITY_WEPSECURITY_PSKSECURITY_EAP 或 SECURITY_NONEloadConfig/loadResult 获得 AP 的配置信息onBindView 根据 RSSI 和是否开发判断 AP 显示 的图标compareTo 比较俩个 AP 是否相同refresh 更新 AP 的 title 和 Summary 6.Summary 设置当前 wiif 状态的 summary,如“正在扫描...”,“正在连接到”等内容。
7.WifiAPITest Wifi API 测试,主要用于测试 WifiManager 的disconnect,disableNetworknetid和 enableNetworknetid false这个方法。
8.WifiConfigController 主要方法 理解requireKeyStore 判断指定 WifiConfiguration 的信息中是否包含 keystore,只有包含了 keystore 的 WifiConfiguration 才能进行连接和保存等操作WifiConfigController 初始化 Wifi 配置界面addRow 在配置界面中添加一行显示的的信息enableSubmitIfAppropriate 在条件password ip and proxy settings are valid 满足后显示 submit 按钮并置为 enabledgetConfig 获得 WifiConfiguration 信息ipAndProxyFieldsAreValid 判断 ip 和 proxy 是否需要显示配置 在静态分配 ip 情况下,执行 validateIpConfigFields检 查 ip 设置是否有效 在静态设置 proxy 的情况下,通过 ProxySelector.validate检查设置是否有效;validateIpConfigFields 检查 static_ip 配置信息是否有效,通过检查 ip,gatewaydns 地址等信息的格式是否符合标准,判 断 static_ip 配置是否有效。
getWpsConfig 获得 wps 配置信息showSecurityFields 显示加密的界面 判断显示密码,加密方式等的控件是否为 visibleshowNetworkSetupFields 显示网络配置界面 根据 mNetworkSetupSpinner 的值,决定 wps_fields 和 security_fields 是否显示。
showIpConfigFields 显示手动配置 ip 的界面showProxyFields 显示代理配置界面afterTextChanged 在配置界面中,文本框内容改变后判断是否显示 submit 按钮。
WPS 相关知识介绍 WPS(Wi-Fi Protected Setup,Wi-Fi 保护设置)是由 Wi-Fi 联盟组织实施的认证项目,主要致力于简化无线局域网的安装及安全性能配置工作。
在传统方式下,用户新建一个无线网络时,必须在接入点手动设置网络名(SSID)和安全密钥, 然后在客户端验证密钥以阻止“不速之客”的闯入。
这整个过程需要用户具备 Wi-Fi 设备的背景知识和修改必要配置的能力。
Wi- Fi Protected Setup 能帮助用户自动设置网络名(SSID)、配置强大的 WPA数据编码及认证功能,用户只需输入个人信息码(PIN 方法)或按下按钮(按钮设置,或称 PBC),即能安全地连入 WLAN。
WPS 可以帮助客户端用户自动配置网络名(SSID)及无线加密密钥。
对于普通用户来说,无需了解 SSID 和安全密钥的概念就能实现安全连接;而且用户的安全密钥不可能被外人破解,因为它是随机产生的;最重要的是用户无需记忆冗长的无线加密密码,避免了忘记密码的麻烦。
WPS 优点: WPS 能够在网络中为接入点及 WPS 客户端设备自动配置网络名(SSID)及 WPA安全密钥。
当连接 WPS 设备时,用户没有必要去了解 SSID 和安全密钥等概念。
用户的安全密钥不可能被外人破解,因为它是随机产生的。
用户不必输入预知的密码段或冗长的十六进制字符串。
信息及网络证书通过扩展认证协议(EAP)在空中进行安全交换,该协议是 WPA2使用的认证协议之一。
WPS 缺点: WPS 不支持设备不依靠 AP 而直接通讯的“ad hoc”网络。
网络中所有的 Wi-Fi 设备必须通过 WPS 认证或与 WPS 兼容,否则将不能利用 WPS简化网络安全配置工作。
由于 WPS 中的十六进制字符串是随机产生的,所以很难在 WPS 网络中添加一个非WPS 的客户端设备。
WPS 是一项新的认证技术,所以并非所有厂商都支持。
Android4.0 新增功能 Wi-Fi Direct 1.Wifi Direct 技术简介 Wi-Fi Direct 标准是指允许无线网络中的设备无需通过无线路由器即可相互连接。
与蓝牙技术类似,这种标准允许无线设备以点对点形式互连,不过在传输速度与传输距离方面则比蓝牙有大幅提升。
Wi-Fi Direct 技术特点 移动性与便携性:Wi-Fi Direct 设备能够随时随地实现互相连接。
由于不需要 Wi-Fi路由器或接入点,因此 Wi-Fi 设备可以在任何地点实现连接。
即时可用性:用户将得以利用带回家的第一部 Wi-Fi Direct 认证设备建立直接连接。
例如,一部新购买的 Wi-Fi Direct 笔记本可以与用户已有的传统 Wi-Fi 设备创建直接连接。
易用性:Wi-Fi Direct 设备发现(Device Discovery)与服务发现(ServiceDiscovery)功能帮助用户确定可用的设备与服务,然后建立连接。
例如,如果用户想要打印文件,他们可以通过上述服务了解到哪个 Wi-Fi 网络拥有打印机。
简单而安全的连接:Wi-Fi Direct 设备采用 Wi-Fi Protected Setup简化了在设备之间创建安全连接的过程。
用户可以按下任一设备上的按钮,也可以输入 PIN 码(即设备显示的 PIN 码),轻松创建安全连接。
Wi-Fi Direct 主要优缺点 主要优点:传输速率高,兼容原有设备。
主要缺点:耗电量高(较之蓝牙)。
2.Android P2P
源码学习 WifiP2pSettings Wifi P2P 设置主要方法 理解mReceiver 处理接收到的各种 Action 方法: WIFI_P2P_PEERS_CHANGED_ACTION:调用 requestPeers; WIFI_P2P_CONNECTION_CHANGED_ACTION:获得 NetworkInfo,判断是否为连接状态; WIFI_P2P_THIS_DEVICE_CHANGED_ACTION:调用 updateDevicePrefonCreate 创建时调用 获得系统服务 WifiP2pManager 和 WifiP2pManager.Channel; mConnectListener/mDisconnectListener 为 wifiP2pDialog 设置 Listener; setHasOptionsMenutrue设置操作菜单onResume 注册 mReceiver; discoverPeers探索附近设备onPause 注销 mReceiver;onOptionsItemSelected menu 事件响应: MENU_ID_SEARCH:discoverPeers探索附近设备; MENU_ID_CREATE_GROUP:createGroup创建群组; MENU_ID_REMOVE_GROUP:removeGroup移除群组 ; MENU_ID_ADVANCED: 未处理; 以上所调用的方法都是 WifiP2pManager 的方法onPreferenceTreeClick 点击一个设备,根据设备状态弹出相关对话框updateDevicePref 更新设备属性 首先设置 device 的配置信息,然后调用 onPeersAvailable方法更新 UIonPeersAvailable 更新 UI WifiP2pDialog 主要方法 理解getConfig 获得 P2P 配置信息,.
上一篇:
C#文档注释规范
下一篇:
餐饮管理系统