SoftAP打开与关闭
目录
1.三个名词的解释以及关系
Tethering——网络共享,WiFi热点、蓝牙、USB
SoftAp——热点(无线接入点),临时接入点
Hostapd——Hostapd是用于Linux系统的软件,,支持多种无线认证和加密协议,将任何计算机变成一个无线接入点和认证服务器
Android通过Hostapd,搭建一个SoftAp,通过Tethering实现不同的网络共享。
2.热点打开关闭的流程
基本就是不同参数的StartTethering、StartSoftAp以及StartHostapd!
Outline
六个目录,kernel那边未涉及到。
简单走一下流程!
Tethering
TetheringSettings
startTethering(TETHERING_WIFI) 不同参数
Preference 的监听器
ConnectivityManager
1.四个参数
Type——热点类型
Receiver——热点成功失败接收通知,回调函数
showProvisioningUi——是否网络配送界面
Handler——Handler对象,后台线程中接收结果
BinderBasic
binder通信基础
1.framework的一些进程
2.内核空间和用户空间
3.Binder 是基于 C/S 架构的。由一系列的组件组成,包括 Client、Server、ServiceManager、Binder 驱动。
其中Client、Server、Service Manager 运行在用户空间,Binder 驱动运行在内核空间。
4.ServiceManager 是一个进程,Server 是另一个进程,Server 向 ServiceManager 中注册 Binder 必然涉及到进程间通信。当前实现进程间通信又要用到进程间通信
ConnectivityManager&Service
第一个Binder通信
ConnectiviyService
1.几个名词
网络有效性检测(NetworkMonitor)
网络评分机制(NetworkFactory)
路由配置信息的获取(NetworkAgent)
网络物理端口的设置(Netd)
2.总结
通过wifi,mobile data,Tethering,VPN 等方式来获取路由配置信息。无论通过哪种方式,获取到路由配置信息后,需要交给ConnectivityService来处理,ConnectivityService通过ping网络来检查网络的有效性,进而影响到各个数据业务方式的评分值,ConnectivityService通过这些评分值来决定以哪个数据业务方式连接网络。
Tethering
网络共享
SoftAp
WifiManager&Service
1.第二个Binder通信,wifi调用消息流,ASyncChannel主要是一个Binder通信的一个类,提供一种异步的,面向消息的方式进行Binder通信
2.WifiService相当于Wifi的控制器,负责各种Wifi的操作,比如开关,扫描以及连接等。
WifiService
WifiService 三个交互
Settings
上面与WifiService交互的ContentProvider
WifiSettingsStore 特殊的两种Wifi状态,就是飞行模式下Wifi的状态,飞行模式下手动开启Wifi和打开飞行模式导致Wifi被关闭
WifiController这个状态机去监听飞行模式是否打开和关闭
WifiStateMachine
WifiController 两种状态
WifiStateMachine 四种状态
StateMachine
创建某些继承自State的类,代表我们要添加的状态
调用addState()方法,添加状态机
调用setInitialState()设置初始状态
调用start()方法,开启状态机
补充Wifi的一些状态
SoftApManager
SoftApManager
以其为核心,通过onConnectedClientChanged获取当前有几个设备连接热点,通过contentprovider获取到自动开关热点开关是否打开,这两个条件满足,wakeupmessage定时(写死可设置)的发送消息来开关热点。
SoftApStateMachine的两种状态
Hostapd
WifiCond
1.wificond
2.第三个binder通信
Wpa_supplicant_8
hostapd-----AP 侧进程,可以构建一个独立 AP 或者一个 RADIUS 认证服务器
wpa_supplicant-----STA 侧进程,包含了 802.1x、WPA 的请求工作
arc-----资源
Summary
两幅图讲一下,已经WiFi开关与热点开关的一些差异