Andriod7.0之wifi开启流程(含流程框图及流程图)

流程说明之前,我们先看一下wifi的框架:
在这里插入图片描述

  • WifiSettings.java 负责显示Wifi的设置界面
  • WifiEnabler.java 负责Wifi的开关逻辑
  • WifiDialog.java 负责Wifi的对话框
  • WifiInfo.java 表示Wifi的相关配置信息
  • WifiManager: 它是Wifi模块向外部应用透漏出来的接口,其它所有应用都可以通过WifiManager来操作Wifi的各项功能,但是WifiManager本身不具备处理请求的能力,而是把所有的请求转发给WifServiceImpl来处理。
  • WifiService: Java Framework中Wifi功能的总入口,负责Wifi功能的核心业务。它是服务器端的实现,作为Wifi部分的核心,处理实际的驱动加载、扫描、链接、断开等命令,以及底层上报的事件。对于主动的命令控制,WiFi是一个简单的封装,针对来自客户端的控制命令,调用相应的WifiNative底层实现。
  • WifiStateTracker: 除了负责WiFi的电源管理模式等功能外,其核心是WifiMonitor所实现的事件轮询机制,以及消息处理函数handleMessage()。
  • WifiMonitor: 专门负责接收来自Wpa_supplicant的事件,并将这些信息进行分类再交予StateMachine处理。
  • WifiNative: 一个接口类,主要是提供一些native方法用于wifi framework层和WPAS通信。WifiNative的主要实现都在wifi.c函数里,WifiNative不过是将其封装,供framework层调用。
    在这里插入图片描述
  • JNI:android_net_wifi_Wifi.cpp就是典型jni接口,通过它可以直接调用Wifi的硬件抽象层
  • Wifi Hardware层:也叫wpa_supplicant适配层,是通用wpa_supplicant的封装。wpa_supplicant适配层起着承上启下的作用,主要用于与wpa_supplicant守护进程的通信,以供给Wifi框架层使用。
  • wpa_supplicant层(wifi tool):该层是Wifi FrameWork层的基石,也叫Wifi服务层。

1:WIFI模块初始化:
SystemServer 启动的时候,会生成一个ConnectivityService 实例, ConnectivityService 的构造函数会创建WifiServiceWifiStateTracker 会创建WifiMonitor 接收来自底层的事件。

WifiService 和WifiMonitor 是整个模块的核心,我们必须围绕这两个服务端进行。

  • WifiService : 负责启动关闭wpa_supplicant、WifiMonitor监视线程和把命令下发给wpa_supplicant
  • WifiMonitor: 负责从wpa_supplicant 接收事件通知。

也就是说WifiService负责wifi整个流程的控制,而WifiMonitor负责监视底层的事件。
下面是流程图:
在这里插入图片描述
请注意上图红色的初始化序号,为初始化顺序
2.wifi模块的启动:
  WirelessSettings 在初始化的时候配置了由WifiEnabler 来处理Wifi 按钮,当用户按下Wifi 按钮后,调用WifiEnabler 的onPreferenceChange,再由WifiEnabler调用WifiManager 的setWifiEnabled 接口函数,通过AIDL,实际调用的是WifiService 的setWifiEnabled 函数,WifiService 接着向自身发送一条MESSAGE_ENABLE_WIFI 消息,在处理该消息的代码中做真正的使能工作:

  • 首先装载WIFI 内核模块
  • 然后启动wpa_supplicant
  • 再通过WifiStateTracker 来启动WifiMonitor中的监视线程

下面是流程图:
在这里插入图片描述
注意,上图绿色是调用的顺序
3.查找wifi热点:
Wifi模块开启后会对外发送WIFI_STATE_CHANGED_ACTION,WifiLayer中注册了Action的Receiver。当WifiLayer收到此Action后开始scan的流程:
在这里插入图片描述

4.配置AP参数并连接
用户在 WifiSettings 界面上选择了一个AP 后,会显示配置AP 参数的一个对话框:
在这里插入图片描述
5.配置ip
在这里插入图片描述
现在我们将这些流程梳理到框架中:
说明一下:

  • 绿色字体及绿色数字:wifi模块初始化及顺序
  • 黄色字体及黄色数字:wifi模块的启动及顺序
  • 红色字体及红色数字:wifi模块查找wifi热点及顺序
  • 蓝色字体及蓝色数字:wifi的ap参数配置及连接顺序
  • 黑色字体及黑色数字:wifi的ip配置及顺序
    在这里插入图片描述
    有一点混乱,还请读者自行梳理一下
    更多的细节会在后面的博客中体现,如有错误,还请大家多提建议,谢谢!

猜你喜欢

转载自blog.csdn.net/weixin_42271802/article/details/110431923