IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 热点开启流程 -> 正文阅读

[移动开发]Android 热点开启流程

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方法。?

?

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:34:46  更:2022-07-17 16:37:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 3:41:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码