这是正在发生的事情。 基本上,您可以告诉操作系统禁用网络,并且您可以告诉操作系统启用网络,但是无法告诉操作系统要连接到哪个网络。
如果在设备上配置了多个WiFi接入点(并且两者都处于enabled状态),则操作系统将决定连接哪个接入点。
强制操作系统连接到范围内的其中一个网络而不是另一个网络的唯一方法是在您不想连接的范围内的网络上调用disableNetwork() 。
让我们逐行完成您的代码:
mWifiManager.disconnect();
上面的行告诉操作系统断开与当前连接的WiFi接入点的连接。
mWifiManager.enableNetwork(config.networkId, true);
上面的行告诉设备如果以前处于disabled状态,则将网络设置为enabled状态。
mWifiManager.reconnect();
从文档 :
如果我们当前已断开连接,请重新连接到当前活动的接入点。 这可能导致状态更改事件的异步传递。
所以,当你说相反它连接回以前连接的wifi。 ,它正如预期的那样工作,因为操作系统正在重新连接到它认为当前活动的接入点 。
如果你真的想要禁用其他网络,以便操作系统连接到你刚刚点击的那个,你可以这样做:
// Go through all the cached wifis and check if the selected GoPro was cached before WifiInfo info = mWifiManager.getConnectionInfo(); //get WifiInfo int id = info.getNetworkId(); //get id of currently connected network for (WifiConfiguration config : configurations) { // If it was cached connect to it and that's all if (config.SSID != null && config.SSID.equals("\"" + mDrawerListView.getAdapter().getItem(position) + "\"")) { // Log Log.i("onReceive", "Connecting to: " + config.SSID); mWifiManager.disconnect(); mWifiManager.disableNetwork(id); //disable current network mWifiManager.enableNetwork(config.networkId, true); mWifiManager.reconnect(); break; } }