我正在编写一个 android 应用程序,它将连接到特定的 WPA 接入点,连接后,它将发出一个 http 调用。它不会保存网络配置。我已经阅读了几乎所有关于连接到 wifi 网络的堆栈溢出的帖子,但找不到适合我的答案。这是我用来连接的代码..
WifiConfiguration wc = new WifiConfiguration();
wc.allowedAuthAlgorithms.clear();
wc.allowedGroupCiphers.clear();
wc.allowedPairwiseCiphers.clear();
wc.allowedProtocols.clear();
wc.allowedKeyManagement.clear();
wc.SSID = "\"".concat("<ssid>").concat("\"");
wc.preSharedKey = "\"".concat("<password>").concat("\"");
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); // For WPA2
wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); // For WPA
wc.priority = 0;
//wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
// connect to and enable the connection
WifiManager wifiManager = (WifiManager) getSystemService(this.WIFI_SERVICE);
int netId = wifiManager.addNetwork(wc);
boolean wifiEnabled = wifiManager.enableNetwork(netId, true);
wifiManager.setWifiEnabled(true);
Log.d("opener", "addNetwork returned " + netId);
if (netId > 0) {
wifiId = netId;
}
但是 netId 始终为 -1。我已经在两款不同的手机(ICS:HTC Rezound 和 GingerBread:Motorola DroidX)上进行了尝试。两者都显示完全相同的结果。我究竟做错了什么?
编辑:我用 WPA2 接入点尝试了相同的代码,得到了非常奇怪的结果。运行此代码时,第一次它会返回 -1,但如果我第二次调用相同的方法并延迟 1 秒,它将返回有效的 netId。所以问题是
- 为什么上面的代码没有连接到 wpa ?
- 在 wpa2 中,为什么我需要调用上述方法两次才能连接?编辑:我观察到我必须连接多次才能连接。有时需要 3-4 次才能连接。所以现在我循环直到添加配置返回> 0 id。