当前位置: 首页 > news >正文

Android WIFI体系

先说说WifiLock、MulticastLock 、IWificond

  1. WifiLock 允许应用强制保持 WiFi 活跃,即便设备处于休眠状态。如WIFI_MODE_FULL_HIGH_PERF:保持高性能 WiFi 活跃状态,适用于高带宽需求,如视频通话、流媒体。经测试有的场景能减少100ms的延迟
  2. MulticastLock 允许应用接收 WiFi 组播数据包,适用于需要使用 UDP 多播通信的场景。组播会导致较高的电量消耗,建议在不需要时及时释放。
  3. wificond的话见下图
    在这里插入图片描述
    文章主要就是介绍wifi扫描的代码逻辑、lock的实现还有80211中的一些知识

wifi的帧有以下几种:
管理帧、控制帧和数据帧(都是洋大人制定的协议罢了)
在这里插入图片描述
在这里插入图片描述
常见的三种Wifi协议,速度和频段以及调制决定,这个就偏硬件了
802.11ax 2019 Wi-Fi6
802.11ac 2013 Wi-Fi5,MU-MIMO,支持5G
802.11n 2009 Wi-Fi4,MIMO最大4*4

主动扫描wifi的时候,STA主动发送probe-request帧到空中,AP收到后回复probe-response给STA;
隐藏SSID的扫描:如果probe-request中包含具体的SSID,那么只有SSID匹配的AP才会回复probe response,通常用来扫描隐藏AP;
被动扫描wifi的时候如下图:(这个广播包里可以包含任何数据其实)。
在这里插入图片描述
连接的话就是
在这里插入图片描述
目前Wi-Fi在打开状态下芯片一直是活动状态,Wi-Fi芯片支持一系列offload功能,可以把一些任务交给芯片处理,主机可以休眠。Wi-Fi在不需要传输数据时释放wake lock,使主机有机会睡下去,同时会启用包过滤,只有收到特定类型的包之后才会唤醒主机,并传输给kernel,比如单播和特定的多播帧。通过周期唤醒,接收并解析Beacon帧中的TIM IE,看AP是否有缓存的数据,如果没有则继续睡下去

漫游强调的是 在同一网络中 AP 之间的切换,IP 不变,体验平滑。
中继强调的是 物理信号转发扩展,可能存在网段隔离或额外延迟。

4. wifi open 扫描的流程

层级描述
WifiManager应用层接口,如 enableNetwork()connect()
WifiServiceImplFramework 层 Wi-Fi 服务实现
WifiNative封装底层操作接口,如 connectToNetwork()startScan()
wificond用于扫描控制、监听事件、构建 netlink 消息与内核交互
Wifi HAL调用 vendor 提供的 HAL 接口,如 scan、connect(用于兼容芯片)
wpa_supplicantwpa_supplicant 进程处理连接和认证流程,通过 HIDL 接口暴露

wifiService的主要参数

mResourceCache	缓存 Wi-Fi 相关的资源,提升访问效率。
mWifiInjector	依赖注入器,提供 Wi-Fi 模块所需的各种组件和服务。
mClock	提供系统时间相关的功能,常用于记录事件时间戳。
mSettingsConfigStore	管理 Wi-Fi 设置的存储和加载。
mFacade	框架外观接口,封装了对系统服务的访问。
mWifiMetrics	收集和记录 Wi-Fi 性能和使用情况的指标数据。
mWifiTrafficPoller	定期轮询 Wi-Fi 流量数据,用于流量统计和分析。
mUserManager	管理用户账户信息,处理多用户环境下的 Wi-Fi 设置。
mCountryCode	管理和设置设备的国家代码,影响 Wi-Fi 频段和功率设置。
mActiveModeWarden	管理 Wi-Fi 的活动模式,如 STA(客户端)和 AP(热点)模式的切换。
mScanRequestProxy	代理扫描请求,协调多个组件的扫描需求。
mSettingsStore	存储和管理 Wi-Fi 的持久化设置。
mPowerManager	管理设备的电源状态,控制 Wi-Fi 在不同电源模式下的行为。
mAppOps	管理应用的操作权限,确保应用有权限进行 Wi-Fi 操作。
mWifiLockManager	管理 Wi-Fi 锁,防止 Wi-Fi 在特定情况下进入休眠状态。
mWifiMulticastLockManager	管理多播锁,允许应用接收多播数据包。
mWifiBackupRestore	处理 Wi-Fi 设置的备份和恢复功能。
mSoftApBackupRestore	处理软 AP 设置的备份和恢复功能。
mWifiSettingsBackupRestore	处理 Wi-Fi 设置的备份和恢复功能。
mBackupRestoreController	控制备份和恢复过程的协调器。
mWifiApConfigStore	存储和管理 Wi-Fi 热点的配置。
mWifiPermissionsUtil	工具类,检查和管理应用的 Wi-Fi 权限。
mLog	日志记录器,用于记录 Wi-Fi 模块的日志信息。
mFrameworkFacade	框架外观接口,封装了对系统服务的访问。
mTetheredSoftApTracker	跟踪和管理设备作为热点时的状态和连接。
mLohsSoftApTracker	跟踪和管理本地仅热点(LOHS)的状态。
mWifiNetworkSuggestionsManager	管理应用提供的 Wi-Fi 网络建议。
mWifiNetworkFactory	处理 Wi-Fi 网络的请求和连接。
mDppManager	管理 DPP(设备配对协议)功能。
mWifiThreadRunner	管理 Wi-Fi 操作的线程执行。
mWifiHandlerThread	处理 Wi-Fi 操作的线程。
mWifiConfigManager	管理 Wi-Fi 网络配置。
mHalDeviceManager	管理与硬件抽象层(HAL)的交互。
mWifiBlocklistMonitor	监控和管理 Wi-Fi 网络的黑名单。
mPasspointManager	管理 Passpoint(热点 2.0)功能。
mWifiScoreCard	记录和评估 Wi-Fi 网络的性能评分。
mWifiHealthMonitor	监控 Wi-Fi 的健康状态。
mMemoryStoreImpl	存储 Wi-Fi 相关的内存数据。
mWifiConnectivityManager	管理 Wi-Fi 的连接策略和流程。
mWifiDataStall	检测和处理 Wi-Fi 数据阻塞情况。
mWifiNative	与底层 Wi-Fi 驱动进行交互的接口。
mCoexManager	管理 Wi-Fi 与其他无线技术的共存。
mConnectHelper	辅助 Wi-Fi 连接过程的工具类。
mWifiGlobals	存储全局的 Wi-Fi 设置和状态。
mSimRequiredNotifier	通知用户需要 SIM 卡以连接特定 Wi-Fi 网络。
mWifiCarrierInfoManager	管理运营商相关的 Wi-Fi 信息。
mWifiPseudonymManager	管理 Wi-Fi 的伪匿名信息。
mMakeBeforeBreakManager	管理 Wi-Fi 的“先连接后断开”策略。
mLastCallerInfoManager	记录最后调用 Wi-Fi 接口的应用信息。
mWifiDialogManager	管理 Wi-Fi 相关的对话框和提示。
mBuildProperties	存储构建相关的属性信息。
mDefaultClientModeManager	管理默认的客户端模式。
mCountryCodeTracker	跟踪国家代码的变化。
mWifiTetheringDisallowed	标记是否禁止 Wi-Fi 网络共享。
mMultiInternetManager	管理多网络连接的策略。
mDeviceConfigFacade	访问设备配置的接口。
mFeatureFlags	管理功能开关的标志位。
mApplicationQosPolicyRequestHandler	处理应用的 QoS 策略请求。
mWifiPulledAtomLogger	记录 Wi-Fi 的统计数据。
mAfcManager	管理 AFC(自动频率控制)功能。
mTwtManager	管理 TWT(目标唤醒时间)功能。
mWepNetworkUsageController	控制 WEP 网络的使用。🔧 mIfaceMgr 的作用
mIfaceMgr 是 WifiVendorHal 类中的成员变量,全称为 InterfaceManager。​它主要负责管理 Wi-Fi 接口的生命周期,包括创建、删除和查询接口等操作。​主要职责:
接口创建与删除:​通过调用底层 HAL 接口,创建或删除 Wi-Fi 接口(如 STAAP)。
接口信息管理:​维护当前系统中所有 Wi-Fi 接口的信息,供上层查询和使用。
接口状态监听:​监听接口状态的变化,及时通知上层组件进行相应处理。

一、setWifiEnabled 方法概述
setWifiEnabled(String packageName, boolean enable) 是 Android 系统提供的用于启用或禁用 Wi-Fi 的接口。​该方法首先进行一系列权限和状态检查,确保调用者有权进行此操作,并且当前系统状态允许 Wi-Fi 状态的更改。
二、权限和状态检查流程

  1. 权限验证:
    调用 enforceChangePermission(packageName) 检查调用者是否具有修改 Wi-Fi 状态的权限。
    通过 isPrivileged 判断调用者是否为系统应用或具有特权的应用。​
  2. 第三方应用限制:
    对于非特权的第三方应用,若其目标 SDK 版本高于 Android Q(API 29),则禁止其更改 Wi-Fi 状态。​
  3. 飞行模式限制:
    在飞行模式下,仅允许特权应用更改 Wi-Fi 状态。​
  4. 热点模式限制:
    当设备处于热点(SoftAp)模式时,仅允许特权应用更改 Wi-Fi 状态。​
  5. 用户限制:
    若用户设置了禁止更改 Wi-Fi 状态的限制,且调用者不是设备所有者(DO)或配置文件所有者(PO),则禁止更改 Wi-Fi 状态。​
  6. 用户确认对话框:
    对于目标 SDK 版本低于 Android Q 的第三方应用,系统可能会弹出用户确认对话框,询问用户是否允许该应用更改 Wi-Fi 状态。
    三、打开的调用栈为
    ActiveModeWarden -> ConcreteClientModeManager-> mWifiNative-> HalDeviceManager-> WifiHal

HalDeviceManager:Handles device management through the HAL interface. 很明显
WifiNative: Native calls for bring up/shut down of the supplicant daemon and for sending requests to the supplicant daemon
在WifiNative中的setupInterfaceForClientInScanMode:为客户端模式(用于扫描)操作设置界面,此方法在本机守护程序(wificond,供应商 HAL)中以 STA 模式配置接口。最后就掉到了hal那边,如下图:
在这里插入图片描述
Wi-Fi HAL(libwpa_client.so):
socket通信中的client端程序;作为Client端与wpa_supplicant这个Server端进行通信。

wpa_supplicant:
无线STA端的一个解决方案;它实现了WPA/WPA2的密钥协商以及802.1X认证,并控制WLAN Driver的认证,关联以及漫游等。

hostapd:
无线AP端的一个解决方案;

相关文章:

  • Liunx安装Apache Tomcat
  • 数据一致性巡检总结:基于分桶采样的设计与实现
  • Linux CentOS 7 安装Apache 部署html页面
  • 松下机器人快速入门指南(2025年更新版)
  • python:sklearn 决策树(Decision Tree)
  • 当前HPLC载波无法满足全量数据分钟级采集需求的主要原因
  • 绿色版的notepad++怎么加入到右键菜单里
  • 深挖Java基础之:认识Java(创立空间/先导:Java认识)
  • 【Linux】第十四章 提高命令行效率
  • 使用 OpenCV 实现图像中心旋转
  • Nacos源码—2.Nacos服务注册发现分析三
  • DeepSeek 联手 Word,开启办公开挂模式
  • mac word接入deepseek
  • 经典算法 最长单调递增子序列
  • 第十章:CrewAI - 面向流程的多 Agent 结构化协作
  • 【分享】音频音乐剪辑[特殊字符]人声分离伴奏提取[特殊字符]拼接合并
  • KUKA机器人快速启动设置
  • MCP 架构全解析:Host、Client 与 Server 的协同机制
  • CSRF(cross-site request forgery)跨域请求访问
  • Spark 配置 YARN 模式
  • 澎湃读报丨解放日报9个版聚焦:上海,加快建成具有全球影响力的科技创新高地
  • 量子传感新技术“攻克”退相干难题
  • 卡尼领导的加拿大自由党在联邦众议院选举中获胜
  • 赛力斯拟赴港上市:去年扭亏为盈净利59亿元,三年内实现百万销量目标
  • 国家发改委回应美加征关税:典型的单边主义霸凌做法
  • 体坛联播|利物浦提前4轮夺冠,安切洛蒂已向皇马更衣室告别