Android 11使用WifiNetworkSuggestion存网后如何重连已保存WiFi?
Android 11 连接已保存WiFi的实现方案
前提说明
你之前使用的WifiNetworkSuggestion是Android 10及以上官方推荐的WiFi添加方案,添加成功的网络默认会被系统纳入自动连接优先级队列,当目标SSID在可连接范围内时,系统会自动尝试连接,无需额外主动触发。如果需要主动强制切换到指定已保存WiFi,可使用以下方案:
所需权限
需要提前申请以下权限:
- 运行时权限:
ACCESS_FINE_LOCATION - 普通权限:
ACCESS_WIFI_STATE、CHANGE_WIFI_STATE
实现代码
// 要连接的目标SSID String targetSsid = "MyiPhone"; String targetPwd = "myIphone123@#"; WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // 1. 触发WiFi扫描,确认目标网络可用 wifiManager.startScan(); // 实际开发建议注册广播接收SCAN_RESULTS_AVAILABLE_ACTION后再处理扫描结果,此处为简化示例 List<ScanResult> scanResults = wifiManager.getScanResults(); boolean isTargetAvailable = false; for (ScanResult result : scanResults) { if (targetSsid.equals(result.SSID)) { isTargetAvailable = true; break; } } if (!isTargetAvailable) { Log.e(TAG, "目标WiFi不在可连接范围内"); return; } // 2. 构造网络请求,指定要连接的WiFi NetworkRequest request = new NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .setNetworkSpecifier(new WifiNetworkSpecifier.Builder() .setSsid(targetSsid) .setWpa2Passphrase(targetPwd) .build()) .build(); // 3. 发起连接请求 connectivityManager.requestNetwork(request, new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); // 连接成功,绑定当前应用的网络请求走该WiFi connectivityManager.bindProcessToNetwork(network); Log.d(TAG, "已成功连接到:" + targetSsid); } @Override public void onUnavailable() { super.onUnavailable(); Log.e(TAG, "连接目标WiFi失败"); } });
注意事项
- 首次连接指定SSID时会弹出系统授权弹窗,用户确认后后续连接同个SSID不会重复弹窗
- 若用户手动在系统设置中连接了其他WiFi,系统会优先保留用户手动选择的网络,你发起的连接请求会在用户断开手动选择的网络后自动生效
- Android 11上如果需要先断开当前WiFi再切换,可在发起连接前调用
wifiManager.disconnect(),该方法在Android 12及以上已被废弃
内容的提问来源于stack exchange,提问作者user1241903
相关产品推荐
相关产品推荐

