Android框架WiFi架构
Posted 短距(connectivity)知识分享
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android框架WiFi架构相关的知识,希望对你有一定的参考价值。
同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。
一、wpa_supplicant:wpa_supplicant本身开源项目源码,被谷歌收购之后加入android移
动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_spplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调试来对wifi芯片操作,简单的说,wpa_supplicant就是wifi驱动和用户的中转站外加对协议和机密认证的支持。
二、android wifi 系统架构:andtoid wifi 系统引入了wpa_supplicant,它的整个wifi系统
以wpa_supplicant为核心来定义上层用用户接口和下层驱动接口,整个WiFi系统架构如图所示:
Android网络框架
WifiManager
WifiManager用于暴露给用户操作WIFI,上层APP通常可以按照下面的方法获取WifiManager,然后就可以根据开放的函数操作WIFI。
val mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE)
上面的获取函数我们可以跟踪它的实现,发现它就是从一个map中根据Context.WIFI_SERVICE取出WifiManger对象的:
同样的,我们可以发现WifiManager对象的创建也是再这个类里面,在一个static代码段里面运行了下面这段代码,即在类被加载到时就创建了WifiManager并且注册到了上面的map中,我们可以看到在WifiManger创建时把WifiService的引用传了进去,实际上用户调用WifiManger时,所有对WIFI的操作都是走到了WifiService(WifiServiceImpl)。
WifiService
WifiService是在SystemService中被启动的,我们可以在SystemService中看到main函数,然后一直走到创建WifiService:main() -> run() -> startOtherService() -> startService(WIFI_SERVICE_CLASS)。
WifiService实际就是个简单的包装类,真正的实现都是由WifiServiceImpl类来实现,并且发布到ServiceManager中的也是WifiServiceImpl类,所以上面WifiManager中持有的是WifiServiceImpl,对Wifi的调用也都是走到的WifiServiceImpl。
WifiServiceImpl
上面说到了WifiManager暴露出来的所有关于wifi的操作都是由WifiServiceImpl实现的,这里我们先看一下他们的通信方式,第一种是是远程服务的直接调用,跟平时使用AIDL是一样的。
第二种是通过AsyncChannel的方式,这种方式可以很方便的实现跨进程互相调用。
上面的Message会发送到WifiServiceImpl,而WifiServiceImpl处理好又会回调到WifiManager。
上面的回调的消息会在WifiManager的内部类ServiceHandler中收到并处理。
WifiServiceImpl对Wifi的操作,主要是通过WifiController实现,WifiController是一个状态机(TODO状态改变怎么发送到底层)。
以上是关于Android框架WiFi架构的主要内容,如果未能解决你的问题,请参考以下文章