流程说明之前,我们先看一下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配置及顺序

    有一点混乱,还请读者自行梳理一下
    更多的细节会在后面的博客中体现,如有错误,还请大家多提建议,谢谢!

Andriod7.0之wifi开启流程(含流程框图及流程图)相关推荐

  1. android开启热点softap模式,[RK3288][Android6.0] Wifi开启热点(SoftAP)流程小结

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 在Settings中选择要打开wifi热点功能: 调用流程如下: onPreferenceChan ...

  2. 【安卓Framework学习】Wifi框架学习之开启与关闭流程

    系列文章目录 [安卓Framework学习]Wifi框架学习之核心类 [安卓Framework学习]Wifi框架学习之wifi状态机 [安卓Framework学习]Wifi框架学习之连接与断开流程 [ ...

  3. andriod R wifi 开启流程

    前言: wifi chip 的开机初始化流程在这里我们就后面加上,本博客就暂时只有wifi的开启到wifi的连接成功. 虽然都是andriod R,但是还是有可能不同的基线版本代码还是有些许差别,所以 ...

  4. 支持第三方认证用户开启MFA认证流程,支持工单申请Redis数据库应用,JumpServer堡垒机v2.19.0发布

    2022年2月21日,JumpServer开源堡垒机正式发布v2.19.0版本.在这一版本中,JumpServer新增支持第三方认证用户开启MFA认证流程,满足了更多用户对于账号安全性的需求.同时,支 ...

  5. android wifi驱动加载流程

    本文基于android 7.0 海思 Hi3798MV200 平台 WiFi驱动加载流程: 一..进入高级设置,无线设置界面(WifiSettings.java)打开WiFi开关(SwitchBar) ...

  6. 【安卓学习之第三方库】 ZlwAudioRecorder学习:内部流程(含aar文件生成)

    █ [安卓学习之第三方库] ZlwAudioRecorder学习:内部流程(含aar文件生成) █ 系列文章目录 提示:这里是收集了安卓学习之常见问题的相关文章 [安卓学习之MP3] MP3读取格式 ...

  7. sqlite-1.0.0源码执行的基本流程概述

    sqlite-1.0.0原理概述 sqlite是一款嵌入式的轻量级的数据库,首个版本诞生于2000年,该数据库遵守ACID的关系数据库管理系统,SQLite不是一个cs架构的数据库引擎,而是被集成在用 ...

  8. Android10.0系统启动之Launcher(桌面)启动流程-[Android取经之路]

    摘要:上一节我们讲完了Android10.0的ActivityManagerService的启动流程,在AMS的最后启动了Launcher进程,今天我们就来看看Launcher的真正启动流程. 阅读本 ...

  9. Apache DolphinScheduler v2.0.1 Master 和 Worker 执行流程分析系列(三)

    点亮 ⭐️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 这是一系列关于 DolphinScheduler v2.0.1的源码分析文 ...

  10. OAuth2.0协议(一) - 授权码许可流程

    OAuth2.0是什么可以拿来做什么,它只认真的做了一件事授权(Authorization).OAuth2.0是 Open Authorization 2.0的简称,既然是2.0那前面肯定有个1.0. ...

最新文章

  1. Visual Studio集成Qt环境搭建_详解与测试
  2. MongoDB 基础浅谈
  3. Java 7:使用NIO.2进行文件过滤-第1部分
  4. java 6 update 3_Java(TM) 6 Update(java运行环境) V 6.0.450.6 官方版
  5. OpenGL中的几何体实例化(OpenGL Geometry Instancing)
  6. ubuntu的mysql教程 pdf_Ubuntu上的MySQL字符集设置技巧
  7. C# 通过反射获取枚举类型
  8. R语言 echarts4r 不显示图形_【课程预告】清华定量俱乐部lt;R专场gt;第三讲——R可视化基础...
  9. 单应性(同义词直射变换、射影变换和射影性等)(来自wiki)
  10. 外包一个小程序多少钱(外包小程序开发的价格费用)
  11. 观《当幸福来敲门》有感
  12. 圆周率怎么计算来的?教你利用欧拉恒等式,生成圆周率万能公式!
  13. python开发积累
  14. 用PHP写PHP扩展-Another way writing php extensions
  15. web前端研发工具篇
  16. hydra详细使用教程
  17. 基于STM32F103设计的智能门锁(支持多种开锁解锁方式)
  18. 案例解析:广域网加速在校园网中的应用
  19. Eclipse配置gradle插件教程
  20. 超级盘点 | Github年终各大排行榜

热门文章

  1. office365彻底卸载教程
  2. icp matlab,ICP算法MATLAB仿真
  3. STM32单片机介绍2
  4. IPD咨询之企业营销体系解决方案:让营业额快速翻倍!
  5. C语言oj统计衣服尺寸,如何测量衣服尺寸?
  6. 单片机中断原理及定时器详解
  7. 基于微信小程序的每日签到打卡系统ssm框架
  8. python抓取网易云音乐评论_如何爬取网易云音乐评论?
  9. [week15] ZJM 与霍格沃兹 —— 字符串哈希
  10. 解决端口占用问题 Port xxxx was already in use