[RK3399][Android7.1] 调试笔记 Settings 中的 WiFi 设置流程分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33487044/article/details/86433485
平台 内核版本 安卓版本
RK3399 Linux4.4 Android7.1

介绍

AndroidSettings应用程序对WiFi的使用,是典型的 WiFi应用方
式,也是用户可见的 Android WiFi 管理程序。
在这里插入图片描述

流程分析

目录:packages/apps/Settings/src/com/android/settings/wifi
在这里插入图片描述

文件:WifiSettings.javaWifiEnabler.java
用户在设置界面开启 WiFi ,调用 Settings应用程序的 WifiEnabler.setWifiEnabled,然后调用WifiManager.setWifiEnabled
在这里插入图片描述

看一下WifiSettings.java:

设置这边说到底其实就是监控WiFi开关的变化,然后根据开关走对应的逻辑处理。
两个比较重要的类:

1)WifiSettings:设置中wifi主界面所对应的代码
2)WifiEnabler:设置中负责wifi开关打开和关闭事件处理的类
wifisettings activityonStart函数中,创建一个WifiEnabler对象,用于实现wifi开关功能。

private WifiEnabler mWifiEnabler;

在这里插入图片描述

重点分析下createWifiEnadbler

onStart会调用createWifiEnadbler
在这里插入图片描述


1、activity

packages/apps/Settings/src/com/android/settings/SettingsActivity.java
看看getSwitchBar
在这里插入图片描述


2、WifiEnabler

WifiEnabler.java
在这里插入图片描述
这个里面做了两步:

2.1、:WifiManager给应用层使用:

首先看下SystemServer有关wifi的有哪些:
目录:frameworks/base/services/java/com/android/server/SystemServer.java
在这里插入图片描述

获得WIFI_SERVICE
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

2.2、setupSwitchBar

在这里插入图片描述
这里是调用前面的启动监听将mListeningToOnSwitchChange设为true,这样当我们点击wifi开关按钮的时候就会调用前面的onSwitchChanged随即调用mListener.onSwitchToggled(isChecked);


最终会调用到WifiEnabler.java中的handleWifiStateChanged
看一下WifiEnabler.java中的onSwitchChanged
在这里插入图片描述

WifiManager.setWifiEnabled通过Binder机制调用 WifiService.setWifiEnabled 。这里的 WifiService也就是WiFiJava 层的内容。


3、 WifiService.setWifiEnabled分析:

其实WiFiManager使用aidl方式和WifiService进行通信frameworks/base/wifi/java/android/net/wifi/IWifiManager.aidl

boolean setWifiEnabled(String packageName, boolean enable);

通过AIDL方式,在Android7.1中,实际调用的是WifiServiceImpl::setWifiEnabled(boolean enable)

目录:frameworks/base/wifi/java/android/net/wifi/WifiManager.java
在这里插入图片描述


最终调用的的是WifiServiceImpl中的setWifiEnabled方法:
目录:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
WifiServiceImpl中实现WifiService的方法,像WifiController发消息:CMD_WIFI_TOGGLED

在这里插入图片描述
操作使能开关是的日志如下:
在这里插入图片描述

从代码可以看出,这里主要的操作是将wifi是否enable的状态存入数据库、向WiFiController发送了CMD_WIFI_TOGGLED消息。
WifiController状态机的创建、开启工作在WifiServiceImpl中完成这个状态稍后介绍
《WifiController状态机》-待写
《WifiStateMachine状态机》-待写```````

StateMachine的知识可知,转换到某个状态时,会依次调用父、子状态的enter()函数。最终调用如下:
目录:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
在这里插入图片描述

最终会调用到:
目录:frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java
在这里插入图片描述

操作wifi后的打印日志如下:
在这里插入图片描述

看一下对应的函数:
扫描:
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33487044/article/details/86433485