我制作了一个Android应用程序,它在启动时获取当前的wifi网络并连接到另一个。至少这是应该做的:
wifiInfo = wifiManager.getConnectionInfo();
OldNetworkID = wifiInfo.getNetworkId(); //save current network
WDTNetworkID = wifiManager.addNetwork(wificonfiguration); //add new network
wifiManager.disconnect();
wifiManager.enableNetwork(WDTNetworkID, true); //enable new network and disable all others
wifiManager.reconnect();
当我调试时,我可以看到wificonfiguration
包含正确的SSID(新网络的SSID)。
addNetwork()
之后,我看到wifiManager.getConfiguredNetworks()
包含具有正确SSID且与WDTNetworkID
相同的网络ID的新网络。此时网络已启用。
但在启用enableNetwork()
而不是WDTNetworkID
并且其他人已停用后,我看到OldNetworkID
已启用且其余已停用。
我做错了吗?
我在调试时添加了几张手表的图片。 您可以在此处看到旧网络已启用,其余网络已禁用。
答案 0 :(得分:0)
这里的问题是app运行的设备是android 5.1.1。
正如它在enableNetwork()
:
注意:如果应用程序的目标SDK版本为LOLLIPOP或更新,即使连接了Wi-Fi,网络通信也可能无法使用Wi-Fi;也可以通过其他网络发送流量,例如蜂窝数据,蓝牙网络共享或以太网。例如,如果提供互联网接入的另一网络(例如,蜂窝数据)可用,则流量将永远不会使用不提供互联网接入的Wi-Fi网络(例如,无线打印机)。需要确保其网络流量使用Wi-Fi的应用程序应使用bindSocket(java.net.Socket),openConnection(java.net.URL)或bindProcessToNetwork(Network)等API来执行此操作。
答案 1 :(得分:0)
您只需将此行添加到您的代码中即可。我有同样的问题,添加此行帮助me.conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
//After sleep a little milliseconds then check exist connection with this code:
try {
Thread.sleep(3000);
Toast.makeText(MyActivity.this, "You are connected to " +
mainWifimanagerObject.getConnectionInfo().getSSID(), Toast.LENGTH_LONG).show();
}
catch (InterruptedException e) {e.printStackTrace();}