android wifi 的大致流程图
### Android WiFi 模块概述 Android系统的WiFi功能是其核心通信能力之一,它涉及多个层次的组件协同工作,包括用户界面、系统服务、底层驱动以及网络协议栈等。本篇文章将详细解析Android WiFi的工作流程,从打开WiFi到成功连接接入点(AP)的过程。 ### Android WiFi 工作流程解析 #### 1. **SystemServer 启动 ConnectivityService** - 在Android系统启动过程中,`SystemServer`会在合适的时间点创建并启动`ConnectivityService`实例。 - `ConnectivityService`主要负责管理网络连接状态,其中包括WiFi相关的服务。它的创建过程如下: - ```java try { Log.i(TAG, "Starting ConnectivityService."); ServiceManager.addService(Context.CONNECTIVITY_SERVICE, new ConnectivityService(context)); } catch (Throwable e) { Log.e(TAG, "Failure starting ConnectivityService", e); } ``` #### 2. **创建 WifiService** - `ConnectivityService`在初始化时会创建`WifiService`实例,并通过`ServiceManager`将其注册到系统服务中。 - ```java if(DBG) Log.v(TAG, "Starting WifiService."); mWifiStateTracker = new WifiStateTracker(context, handler); WifiService wifiService = new WifiService(context, mWifiStateTracker); ServiceManager.addService(Context.WIFI_SERVICE, wifiService); ``` #### 3. **核心组件:WifiStateTracker 和 WifiMonitor** - `WifiStateTracker`用于跟踪WiFi的状态变化,而`WifiMonitor`则负责监听底层(通常是通过`wpa_supplicant`)传来的各种事件,如连接状态的变化等。 - 这两个组件是整个WiFi模块的核心,它们之间的交互确保了WiFi服务的正常运行。 #### 4. **使能 WiFi** - 当用户尝试开启WiFi时,系统会调用`WifiEnabler`的`onPreferenceChange`方法,进而调用`WifiManager`的`setWifiEnabled`接口。 - 通过`AIDL`(Android Interface Definition Language),这个请求最终会被传递给`WifiService`中的`setWifiEnabled`方法进行处理。 - ```java private boolean setWifiEnabledBlocking(boolean enable) { final int eventualWifiState = enable ? WIFI_STATE_ENABLED : WIFI_STATE_DISABLED; updateWifiState(enable ? WIFI_STATE_ENABLING : WIFI_STATE_DISABLING); if (enable) { if (!WifiNative.loadDriver()) { Log.e(TAG, "Failed to load Wi-Fi driver."); updateWifiState(WIFI_STATE_UNKNOWN); return false; } if (!WifiNative.startSupplicant()) { // 继续后续步骤 } } else { // 关闭流程 } } ``` #### 5. **启动 wpa_supplicant** - `setWifiEnabled`方法中的逻辑还包括加载WiFi内核模块以及启动`wpa_supplicant`进程。 - 内核模块通常位于`/system/lib/modules/wlan.ko`,而`wpa_supplicant`的配置文件一般位于`/data/misc/wifi/wpa_supplicant.conf`。 #### 6. **启动 WifiMonitor 监视线程** - 在成功启动`wpa_supplicant`之后,`WifiService`还会通过`WifiStateTracker`来启动`WifiMonitor`中的监控线程。 - 这个线程的主要职责是从`wpa_supplicant`接收事件通知,并根据这些通知更新系统内部状态或触发相应的UI更新。 ### 事件处理 - 在WiFi连接过程中,会有多种事件被触发,这些事件通过特定的动作来通知应用程序或者系统组件。 - `WIFI_STATE_CHANGED_ACTION`: WiFi状态发生变化时触发。 - `NETWORK_STATE_CHANGED_ACTION`: 网络状态发生变化时触发。 - `SCAN_RESULTS_AVAILABLE_ACTION`: 扫描结果可用时触发。 - `SUPPLICANT_CONNECTION_CHANGE_ACTION`: `wpa_supplicant`连接状态发生变化时触发。 ### JNI 层面 - 在Android WiFi模块中,部分操作需要与底层C/C++库进行交互,这时就会用到JNI(Java Native Interface)。例如,`WifiNative`类就是用来封装与原生层交互的逻辑。 - 例如加载内核模块、启动`wpa_supplicant`等操作都是通过JNI实现的。 ### 小结 Android WiFi的工作流程是一个典型的多层架构示例,从用户界面的操作到系统服务的响应,再到底层驱动的控制,每一步都紧密相连。理解这一流程对于开发人员来说至关重要,它不仅能帮助我们更好地调试问题,还能指导我们在设计相关功能时做出更合理的决策。
- 粉丝: 1
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip
评论8