Android WifiManager.addNetwork () zwraca -1
Piszę aplikację dla systemu Android, która połączy się z konkretnym punktem dostępu WPA, po czym wyśle połączenie http. Nie zapisze konfiguracji sieci. Przeczytałem prawie każdy post na temat przepełnienia stosu podczas łączenia się z siecią Wi-Fi, ale nie mogę znaleźć odpowiedzi, która działa dla mnie. Oto kod, którego używam do łączenia się ..
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;
}
Jednak netId ma zawsze wartość -1. Próbowałem go na dwóch różnych telefonach (ICS: HTC Rezound i GingerBread: Motorola DroidX). Oba pokazują dokładnie takie same wyniki. Co ja robię źle?
Edytuj: Próbowałem tego samego kodu z punktem dostępu WPA2 i otrzymałem bardzo dziwne wyniki. Gdy ten kod był uruchamiany, po raz pierwszy zwracał -1, ale jeśli wywołam tę samą metodę po raz drugi z opóźnieniem 1 sekundy, zwróci poprawny netId. Tak więc są pytania
dlaczego powyższy kod nie łączy się z wpa?w wpa2, dlaczego muszę dwukrotnie wywoływać powyższą metodę, aby uzyskać połączenie? Edytuj: Zauważyłem, że musiałem połączyć się wiele razy, aby uzyskać połączenie. Czasami połączenie trwa 3-4 razy. Więc na razie zapętlam, aż dodam zwroty config> 0 id.