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

基于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───────────┘ │ │ ↓ │ │ 【执行层】 │ │ ├─ 检查是否已在连接中 │ │ ├─ 连接速率限制屏幕关闭时 │ │ └─ 执行连接漫游/新连接 │ │ │ └─────────────────────────────────────────────────────────────┘