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

基于Android11 的wifi自动连接流程梳理

WiFi 自动连接完整流程梳理一、核心组件架构组件文件路径功能ClientModeImplframeworks/opt/net/wifi/service/java/com/android/server/wifi/ClientModeImpl.javaWiFi状态机管理连接状态转换WifiConnectivityManagerframeworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java连接管理器扫描调度和连接决策WifiNetworkSelectorframeworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNetworkSelector.java网络选择器评估并选择最佳网络WifiConfigManagerframeworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConfigManager.java配置管理器管理已保存网络二、自动连接完整流程1. 基础条件检查 ↓ 2. 扫描调度周期扫描/PNO扫描 ↓ 3. 扫描结果过滤 ↓ 4. 候选网络提名 ↓ 5. 网络评分和排序 ↓ 6. 连接执行漫游/新连接详细步骤步骤 1基础条件检查[WifiConnectivityManager.java:1916-1923]if (mWifiEnabled mAutoJoinEnabled) { start(); // 启动自动连接 }步骤 2扫描调度[WifiConnectivityManager.java:1534-1563]屏幕开启周期性单次扫描20s→40s→80s→160s屏幕关闭PNO 扫描仅断开状态160秒间隔步骤 3扫描结果过滤[WifiNetworkSelector.java:368-463]SSID 非空不在 BSSID 黑名单信号强度 ≥ ENTRY 阈值-80 dBm 2.4GHzMBO 允许关联步骤 4候选网络提名[SavedNetworkNominator.java:88-172]网络已配置允许自动连接allowAutojoin true网络选择状态已启用用户未临时禁用步骤 5网络评分[ThroughputScorer.java:72-140] 根据多个因素计算总分选择最高分网络步骤 6连接执行[WifiConnectivityManager.java:875-951]判断是漫游还是新连接检查连接速率限制屏幕关闭时三、触发自动连接的条件按优先级硬性阻止条件必须全部满足条件优先级说明✅ WiFi 已启用最高mWifiEnabled true✅ AutoJoin 已启用最高mAutoJoinEnabled true✅ 有网络请求最高mTrustedConnectionAllowed或mUntrustedConnectionAllowed✅ 无特定网络请求进行中最高!mSpecificNetworkRequestInProgress✅ WiFi 状态为 CONNECTED 或 DISCONNECTED高状态必须是稳定状态✅ 不在瞬态中高!isSupplicantTransientState()网络过滤条件被过滤掉的网络不会参与评分条件阈值/值说明✅ 信号强度≥ -80 dBm (2.4GHz)ENTRY 阈值✅ 允许自动连接allowAutojoin true用户设置✅ 网络选择已启用status.isNetworkEnabled()未被禁用✅ 不在用户禁用列表未被用户临时禁用用户操作网络评分因素权重从高到低因素权重说明 最近选择1,000,000用户最近连接的网络最高优先级 非计费网络1,000不限流量的网络优先 可信网络1,000可信来源的网络优先4️⃣ 已保存网络500用户保存的网络优先于建议网络5️⃣ RSSI 基础分(rssi85)*4信号越强分越高6️⃣ 吞吐量奖励0-200预测吞吐量越高越好7️⃣ 当前网络奖励基础分的20%避免频繁切换8️⃣ 安全性奖励40安全网络WPA2/3优先于开放网络四、关键参数阈值参数值说明信号 ENTRY 阈值-80 dBm (2.4GHz)-77 dBm (5/6GHz)最低可连接信号信号 SUFFICIENT 阈值-73 dBm (2.4GHz)-70 dBm (5/6GHz)足够好的信号连接速率限制6次/4分钟屏幕关闭时限制网络选择间隔最小 10 秒避免频繁切换周期扫描间隔20s→40s→80s→160s指数递增PNO 扫描间隔160 秒屏幕关闭时五、条件优先级总结图┌─────────────────────────────────────────────────────────────┐ │ 自动连接触发条件优先级 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 【阻止层 - 任一不满足即不执行】 │ │ ├─ WiFi 已启用 ──────────────────────────────────┐ │ │ ├─ AutoJoin 已启用 ───────────────────────────────┤ │ │ ├─ 有网络请求可信/不可信 ─────────────────────┤ │ │ ├─ 无特定网络请求进行中 ──────────────────────────┤ │ │ ├─ WiFi 状态稳定CONNECTED/DISCONNECTED ───────┤ │ │ └─ 不在瞬态中 ────────────────────────────────────┘ │ │ ↓ │ │ 【过滤层 - 不满足的网络被过滤】 │ │ ├─ 信号强度 ≥ -80 dBm ────────────────────────┐ │ │ ├─ 允许自动连接 ───────────────────────────────┤ │ │ ├─ 网络选择已启用 ─────────────────────────────┤ │ │ ├─ 不在黑名单中 ────────────────────────────────┤ │ │ └─ MBO 允许关联 ───────────────────────────────┘ │ │ ↓ │ │ 【评分层 - 按权重计算总分选择最高分】 │ │ 1. 最近选择1,000,000──────┐ │ │ 2. 非计费网络1,000───────┤ │ │ 3. 可信网络1,000──────────┤ │ │ 4. 已保存网络500──────────┤ → 总分排序 → 选择最佳网络 │ │ 5. RSSI 基础分(rssi85)*4 ┤ │ │ 6. 吞吐量奖励0-200───────┤ │ │ 7. 当前网络奖励基础分*20% ─┤ │ │ 8. 安全性奖励40───────────┘ │ │ ↓ │ │ 【执行层】 │ │ ├─ 检查是否已在连接中 │ │ ├─ 连接速率限制屏幕关闭时 │ │ └─ 执行连接漫游/新连接 │ │ │ └─────────────────────────────────────────────────────────────┘
http://www.gsyq.cn/news/1410076.html

相关文章:

  • FlashAttention与信息检索:让AI秒找答案
  • 别再傻傻分不清了!Power BI里COUNT、COUNTA、COUNTBLANK到底啥区别?一个例子讲透
  • 2026世界杯洛杉矶SoFi体育场:50亿造价的天价足球圣殿
  • 从MLM到RTD:一文读懂DeBERTa V3的预训练任务革新与HuggingFace快速上手
  • 202614读书笔记|《中亚:女孩的归宿是证明“清白”,男孩的征途是星辰大海》——“自由”不是所有人都能轻易拥有
  • 手把手教你配置Redis,搞定等保2.0测评里的那些‘坑’(附配置文件详解)
  • 【多无人机集群控制11】鲁棒编队跟踪仿真,滑模与PID对比,MATLAB例程
  • 第6篇_Retain_Will_KeepAlive_工业现场为什么不能只会转发PUBLISH
  • 第4篇_SUBSCRIBE不是存个字符串_Broker怎么维护订阅表通配符和多客户端路由
  • 如何零费用享受全套现代化 IT 基础设施的终极流程
  • Win11Debloat:3分钟完成Windows 11终极优化与深度清理的免费神器
  • 新手教程:5分钟实现一个智能体
  • 别再混淆了!一文讲透FPGA中Standard FIFO与FWFT(预读)FIFO的核心差异与应用选型
  • 安全攻防 - 04 GMSSL 工程介绍
  • 终极FPDF指南:5分钟学会用纯PHP生成专业PDF文档
  • 从STK到osgEarth:我的雷达可视化方案迁移踩坑全记录(附完整C++代码)
  • Ambari 3.0+Kafka安全认证
  • Python RTSP 视频流处理完全指南:从稳定接收到智能分析
  • Vue项目里用Highcharts+Canvas做实时频谱瀑布图,我是怎么解决30ms渲染不卡顿的?
  • UE4植被动态效果避坑指南:从SimpleGrassWind撕裂到完美风场(含顶点绘制替代方案)
  • 手把手教你学Simulink——考虑器件结温特性的双向DC-AC逆变器热管理建模仿真
  • 告别纸上谈兵:用Wireshark抓包实战解析5G N2/NGAP切换全流程(附pcap文件)
  • 从保险理赔到广告效果分析:不懂公式也能上手的‘置信区间’实战指南
  • 别再让求解器‘装傻’:COMSOL事件接口(显示/隐式)避坑指南与典型场景盘点
  • 从pnpm报错到Vite打包优化:手把手解决JeecgBoot-Vue3项目启动与构建的那些坑
  • 面试官:Agent 落地会遇到哪些坑?
  • 语言脑机接口解码流程对比【脑机接口恢复语言2】
  • 避坑指南:为什么你的Conda环境里LabelMe的转换命令总失效?详解Python包管理与路径冲突
  • 从‘打包’到‘解压’:一次搞懂tar命令的-cvf、-xvf、-cvzf、-zxvf在CentOS/Ubuntu下的实战
  • 手机变Linux开发机:用Termux和MT管理器打造移动端代码编辑与文件管理环境