Android 9.0 Wifi打开流程_不冬眠的熊的博客-程序员秘密_android 9.0 wifi打开流程

技术标签: Android WIFI  

这一篇简单分析点击WIFI开关后的代码执行流程,直接从WifiManager开始。

WifiManager.java

路径:framework/base/wifi/java/android/net/wifi/WifiManager.java

WifiManager.setWifiEnabled()设置WIFI开启。

WifiServiceImpl.java

路径:/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java

WifiServiceImpl的setWifiEnabled方法中主要做了下面的事情:

enforceChangePermission 判断调用的进程是否有权限。想要开关wifi需要CHANGE_WIFI_STATE 权限。

isAirplaneModeOn 判断飞行模式。

handleWifiToggled 保存wifi 操作的状态。

最后向WifiController发送CMD_WIFI_TOGGLED消息。

WifiController.java

路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiController.java

WifiController是一个高级别的wifi状态机,它管理的状态是wifi开关,wifi热点开关等状态;它是在WIfiServiceImpl的构造函数中初始化、并开始运行。

它里面的方法调用逻辑如下:

这里是转换到了DeviceActiveState状态;

这里执行了mWifiStateMachinePrime.enterClientMode()。

WifiStateMachinePrime.java

路径:/frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachinePrime.java

WifiStateMachinePrime在changeMod()方法中向ModeStateMachine发送了ModeStateMachine.CMD_START_CLIENT_MODE。

最终进入了ModeStateMachine中,ModeStateMachine是一个比较简单的状态机。

这里是转向ClientModeActiveState状态。

在ClientModeActiveState的enter()方法中调用了mManager.start()方法。这里的mManager是ActiveModeManager,我们继续走下去,去看ClientModeManager。

ClientModeManager.java

路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeManager.java

ClientModeStateMachine也是个状态机,它有两个状态。下面是代码执行片段。

这里发送了消息ClientModeStateMachine.CMD_START。

这里执行了一个重要的方法mWifiNative.setupInterfaceForClientMode();我们接着去看WifiNative。

WifiNative.java

路径:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java

这里就可以看到一些关键性的操作:

启动WifiMonitor:WifiMonitor.startMonitoring();startMonitoring()是在WifiMonitor中建立与wpa_supplicant通信的socket通道、创建一个线程接收底层事件并分发处理。这里会创建两个socket通道与wpa_s通信,一个用于下发指令,另一个用于接收事件。成功后WifiMonitor会向WifiStateMachine发送一个代表socket通信建立成功的消息:SUP_CONNECTION_EVENT;收到这个消息就表示Wifi已经启动成功了。

启动Hal:startHal()

启动supplicant:startSupplicant()

加载驱动(loadDriver):setupInterfaceForClientMode()

Wifi启动源码到这里就结束了,后面就是底层逻辑了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zx54633089/article/details/110942341

智能推荐

Golang的简单介绍及Windows环境下安装、部署_dabao87的博客-程序员秘密

Golang安装Golang下载:https://golang.google.cn/dl/。操作系统 包名 Windows go1.4.windows-amd64.msi Linux go1.4.linux-amd64.tar.gz Mac go1.4.darwin-amd64-osx10.8.pkg FreeBSD go1.4.freebsd...

Keras —— 基于InceptionV3模型(不含全连接层)的迁移学习应用_不使用全连接层做分类器_starter_zheng的博客-程序员秘密

一、ImageDataGeneratordef image_preprocess(): #  训练集的图片生成器,通过参数的设置进行数据扩增 train_datagen = ImageDataGenerator( preprocessing_function=preprocess_input, rotation_range=30, ...

dubbo-admin在jdk1.8下报错问题_chengzhuo5471的博客-程序员秘密

ERROR context.ContextLoader - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with nam...

2019-07-03 OSX 安装 mysqlclient 报错 ld: library not found for -lssl_-蜡笔不小新-的博客-程序员秘密

clang -bundle -undefined dynamic_lookup build/temp.macosx-10.14-x86_64-3.7/_mysql.o -L/usr/local/Cellar/mysql/8.0.16/lib -lmysqlclient -lssl -lcrypto -o build/lib.macosx-10.14-x86...

只想安安静静的做个程序员_东方佑的博客-程序员秘密

故事主角用A ,B,C ,D代表本故事 是不是 虚构 巧不巧和 你心里没点b数吗?故事一开始 A,B,C 同时入职了,一家刚成立的创业公司。创业公司(人工智能公司) ,有三个老板,年龄和C相仿,年龄A>B>C(你们猜猜谁最狗),那么也不难猜出三个人来这个公司的原因,先说A是一个喜欢旅游的人,所以猜测一下工作也是如此,干的时间都不长,以前的人工智能公司工作了两个月,辞职了(辞职原因应该是年龄和能力问题),刚到这个公司由于三个老板年轻非常不懂技术,所以招聘了A想让A做技术总监,A来着里的目

linux-2.6.36.4移植到TQ2440_iteye_1485的博客-程序员秘密

QQ:809205580Email:[email protected]目 录1 内核配制和编译-- 41.1修改顶层Makefile- 41.2修改arch/arm/boot/Makefile 增加一行,方便操作--51.3匹配机器码-- 51.4修改系统时钟-- 51.5执行默认配制-- 51.6配制内核-- 51.7编译内核-- 6...

随便推点

51Nod 1090 3个数和为0_五岁鸭?的博客-程序员秘密

51Nod 1090 3个数和为0基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则

android CTS测试FAIL项解决集锦_fangcunlingtai-lily的博客-程序员秘密

Fail的一些修改 1、直接设置问题estUnknownSourcesOffByDefaultfailjunit.framework.AssertionFailedError: Deviceshould not ship with 'Unknown Sources' enabled by default.expected: butwas:

马化腾_马化腾93年在_Daneill的博客-程序员秘密

小马哥93年毕业,95~98年在润迅工作,98年开始考虑创业,向公司上层提出QQ的想法,但是没人理睬,于是开始出来单干。公司刚开始做润迅配套的服务,后来是一个偶然的机会,让马化腾接触到internet即时通讯,

z-index无论设置多高都不起作用情况_qq_23217629的博客-程序员秘密

在做的过程中,发现了一个很简单却又很多人应该碰到的问题,设置Z-INDEX属性无效。在CSS中,只能通过代码改变层级,这个属性就是z-index,要让z-index起作用有个小小前提,就是元素的position属性要是relative,absolute或是fixed。

九度OJ 1115:数字求和 (基础题)_梁山伯liangrx06的博客-程序员秘密

时间限制:1 秒内存限制:32 兆特殊判题:否提交:2396解决:1507题目描述:给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?输入:输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。输出:可能有多组测试数据,对于每组数据,输出一行,给出一个正

SpringBoot中使用@ConfigurationProperties进行配置绑定_configurationproperties pom_richest_qi的博客-程序员秘密

文章目录使用Java读取.properties文件的内容并封装成JavaBean使用SpringBoot的@ConfigurationProperties进行配置绑定@[email protected](prefix = "mycar")使用Java读取.properties文件的内容并封装成JavaBean新建Maven项目:demo1。修改pom.xml,添加依赖。<?xml version="1.0" encoding="U