Android 热点开启流程

目录

1:前言

2:热点的启动流程

2.1:设置启动热点

2.2:进入到ConnectivityManager.java中

 2.3:进入到ConnectivityService的startTethering函数。

2.4:这里又是一个binder通讯,进入到WifiServiceImpl.java的startSoftAp函数 

2.5:WifiController 状态机CMD_SET_AP消息 


1:前言


    从Android 8.0 开始,Android已经支持了wifi和Ap 双状态机,只是在8.0当中没有完完全全剥离开。需要开发者去找到相应的地方启动热点的状态机或者创建热点状态机。
而在Android9.0当中,Android9.0中对热点做了较大改动,将热点很大程度从Wifi中完完全全剥离出来了,并且完成了对wifi和ap双状态机的启动。
Android9.0中对于硬件不支持双wifi的模块,比如rtl8188系列,需要打开并发模式的宏。然后修改虚拟网卡,绑定到insmod ko生成的虚拟网卡即可

对于硬件模块已经支持公模的,比如mt7668 8812 8822系列,直接支持双wifi。

2:热点的启动流程


        只有去分析和追踪了热点的启动流程,才能找到Android9.0当中双wifi做了什么动作,为什么支持了双wifi,另外我们需要修改一些什么东西来支持。


2.1:设置启动热点


   在8.0和9.0当中,启动热点的接口改成了ConnectivityManager 这个类来管理。
启动:ConnectivityManager. startTethering 接口,并且要提供回调
mCm.startTethering(TETHERING_WIFI, true, mStartTetheringCallback, mHandler);
关闭接口:mCm.stopTethering(TETHERING_WIFI);

2.2:进入到ConnectivityManager.java中


frameworks/base/core/java/android/net/ConnectivityManager.java
 

这里提供binder通讯调用到了ConnectivityService服务

 2.3:进入到ConnectivityService的startTethering函数。


frameworks/base/services/core/java/com/android/server/ConnectivityService.java

 

Tethering.java中,函数的调用顺序如下:
startTethering—>enableTetheringInternal—>setWifiTethering,在setWifiTethering中,调用了WifiManager的startSoftAp函数。

2.4:这里又是一个binder通讯,进入到WifiServiceImpl.java的startSoftAp函数 

在这里调用了startSoftApInternal函数,然后向WifiController的状态机发送了CMD_SET_AP消息。

 

2.5:WifiController 状态机CMD_SET_AP消息 

默认进入的是DefaultState状态,处理CMD_SET_AP。 

 

在这里,处理结果是调用WifiStateMachinePrime的enterSoftAPMode方法。在WifiStateMachinePrime中,创建了SoftApManager对象,并且调用了start方法。

 

并且启动 

在这里真正的创建了热点的状态机

热点的状态比较简单,就这几个 

 

到处,热点的状态机流程创建完毕。

热点的开启流程现在就完全转到了SoftApStateMachine中去了。
IdleState状态中处理如下

在startSoftAp里,调用了WifiNative.java的startSoftAp方法。然后切换状态 

 

startSoftAp:

主要是调用WificondControl.java的startHostapd方法。

在这里可以看到创建了IApInterface 对象,然后调用了他的startHostapd方法。而IApInterface 是由ap_interface_impl.cpp实现的。

进入到hostapd_manager.cpp里调用了StartHostapd方法。 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑吧撸码兄弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值