欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-03 09:50:23
流程说明之前,我们先看一下wifi的框架:...

流程说明之前,我们先看一下wifi的框架:
Andriod7.0之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层调用。
    Andriod7.0之wifi开启流程(含流程框图及流程图)
  • 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负责监视底层的事件。
下面是流程图:
Andriod7.0之wifi开启流程(含流程框图及流程图)
请注意上图红色的初始化序号,为初始化顺序
2.wifi模块的启动:
  WirelessSettings 在初始化的时候配置了由WifiEnabler 来处理Wifi 按钮,当用户按下Wifi 按钮后,调用WifiEnabler 的onPreferenceChange,再由WifiEnabler调用WifiManager 的setWifiEnabled 接口函数,通过AIDL,实际调用的是WifiService 的setWifiEnabled 函数,WifiService 接着向自身发送一条MESSAGE_ENABLE_WIFI 消息,在处理该消息的代码中做真正的使能工作:

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

下面是流程图:
Andriod7.0之wifi开启流程(含流程框图及流程图)
注意,上图绿色是调用的顺序
3.查找wifi热点:
Wifi模块开启后会对外发送WIFI_STATE_CHANGED_ACTION,WifiLayer中注册了Action的Receiver。当WifiLayer收到此Action后开始scan的流程:
Andriod7.0之wifi开启流程(含流程框图及流程图)

4.配置AP参数并连接
用户在 WifiSettings 界面上选择了一个AP 后,会显示配置AP 参数的一个对话框:
Andriod7.0之wifi开启流程(含流程框图及流程图)
5.配置ip
Andriod7.0之wifi开启流程(含流程框图及流程图)
现在我们将这些流程梳理到框架中:
说明一下:

  • 绿色字体及绿色数字:wifi模块初始化及顺序
  • 黄色字体及黄色数字:wifi模块的启动及顺序
  • 红色字体及红色数字:wifi模块查找wifi热点及顺序
  • 蓝色字体及蓝色数字:wifi的ap参数配置及连接顺序
  • 黑色字体及黑色数字:wifi的ip配置及顺序
    Andriod7.0之wifi开启流程(含流程框图及流程图)
    有一点混乱,还请读者自行梳理一下
    更多的细节会在后面的博客中体现,如有错误,还请大家多提建议,谢谢!

本文地址:https://blog.csdn.net/weixin_42271802/article/details/110431923