我需要以编程方式连接到隐藏的Wi-Fi网络。我知道它的SSID、安全类型和密码。但出于某些原因,我无法连接它。
如果它没有被隐藏,我可以连接到同一个网络。
这是我的代码:
// configure the network
private void saveWPANetwork(WiFiNetwork network){
WifiConfiguration conf = new WifiConfiguration();
conf.SSID =network.getSSID();
conf.hiddenSSID = true;
conf.status = WifiConfiguration.Status.ENABLED;
conf.preSharedKey =network.getPassword();
conf.priority = 9999;
wifi.addNetwork(conf);
wifi.saveConfiguration();
}
// connect it
protected boolean connectToVaildNetwork() {
List<WifiConfiguration> list = wifi.getConfiguredNetworks();
if(list == null)
return false;
for( WifiConfiguration i : list ) {
for (WiFiNetwork network : config.wiFiNetworksDetails) {
if(network.getSSID().equalsIgnoreCase(i.SSID)){
wifi.enableNetwork(i.networkId, true);
return wifi.reconnect(); /// STRANGE BUT IT ALWAYS RETURNS TRUE, EVEN IF DEVICE IS NOT CONNECTED TO THE HIDDEN NETWORK!
}
}
}
return false;
}
conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
。 - Anh-Tuan Maiint networkId = mWifiManager.addNetwork(conf);
而在if语句中应该像这样:if (i.SSID != null && i.SSID.equals("\"" + ssid + "\"") && networkId == i.networkId)
你需要检查networkId,以防用户已经保存了与隐藏网络相同名称的网络。 - Akef