Android 7.0 WifiMonitor工作流程分析

来源:互联网 发布:怎么看淘宝卖家类目 编辑:程序博客网 时间:2024/05/22 03:43
在wifi启动扫描的分析过程中,出现了多次WifiMonitor的操作,在此分析一下这个函数是如何工作的。
在Android的Wifi体系中,WifiMonitor承担着分发来自wpa_supplicant底层事件的任务。当上层下达Wifi的扫描、连接等指令后, 底层驱动以及wpa_s进行实际的扫描、连接操作,操作完成后会向上层反馈一个event,通知framework扫描是否结束、连接是否成功。
1.WifiMonitor的初始化

在WifiStateMachine的构造函数中获取WifiMonitor的实例,并且在WifiStateMachine的构造函数中注册了一系列的handler。






 从启动扫描流程中可知,在启动过程中会调用startMonitoring(),开始监听从底层上报的消息。

2.startMonitoring()



为了监听wpa_supplicant的事件,需要先建立与wpa_s的消息通道,这一步调用WifiNative.connectToSupplicant()实现。
如果是第一次进行监听mConnected为false,进入else分支。先建立与wpa_s的消息通道,建立成功后会向WifiStateMachine发送SUP_CONNECTION_EVENT消息,通知Wifi状态机。随后,开启事件监听线程:new MonitorThread(mWifiNative, this).start():








 这里我们假设事先下发的是一个wifi扫描的指令,wpa_s反馈event通知wifi扫描的结果,根据实现的一些匹配规则,最后进入handleEvent()函数,此处event是SCAN_RESULTS,向WifiStateMachine发送SCAN_RESULTS_EVENT消息,告知它扫描已经结束,可以去读取扫描结果了。这样,处理流程就用返回到Wifi状态机中。WifiStateMachine收到此消息后,调用WifiStateMachine::setScanResults()方法从wpa_s读取扫描结果,并向外界发送WifiManager.SCAN_RESULTS_AVAILABLE_ACTION广播通知应用。此时一些注册过该广播的应用,例如手机中的Setting app,就能通过调用WifiManager::getScanResults()读取扫描结果了。至此,一个简单的WifiMonitor分发事件的流程结束,其他类型事件的分发跟此过程相似。


 至此,一个简单的上层流程分析结束了。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 人感染了镰刀菌怎么办 40年土地到期后怎么办 土地70年到期后怎么办 极速6k出现闪退怎么办 苹果手机ld锁了怎么办 苹果手机ld被锁怎么办 苹果6太卡了怎么办 东风31泄密案该怎么办 小孩子眼睛近视怎么办才能好起来 u盘丢了没有加密怎么办 公司u盘丢了怎么办 掏耳朵后耳朵痛怎么办 辐射4基地被攻击怎么办 宝珀50噚表带大怎么办 颈如何部皱纹多怎么办 cvt变速箱油少了怎么办 上膛疼 咽唾沫疼怎么办 大便把马桶堵了怎么办 马桶堵了怎么办最简单 马桶堵的水满了怎么办 直冲式马桶堵了怎么办 天梭手表不走了怎么办 机械表老是快该怎么办 机械表有误差 那怎么办 机械表走的快怎么办 新车加了燃油宝怎么办 车离合器片烧了怎么办 车的离合片烧了怎么办 鱼缸没电了缺氧怎么办 水箱的浮球失灵怎么办 鱼缸底滤停电1天怎么办 底滤鱼缸声音大怎么办 马桶提升泵坏了怎么办 汽车前玻璃起雾怎么办 下雨车玻璃起雾怎么办 车玻璃外面起雾怎么办 汽车内玻璃起雾怎么办 汽车前挡风起雾怎么办 车窗内玻璃起雾怎么办 早晨车玻璃起雾怎么办 开空调玻璃起雾怎么办