android wifiManager.addNetwork gibt -1 zurück
Ich Schreibe eine android-app, die die Verbindung zu einem bestimmten WPA-access-point, wenn er angeschlossen ist, es wird eine http-Aufruf. Es wird nicht speichern Sie die Netzwerk-config.
Ich lese fast jeden Beitrag auf stack overflow auf die Verbindung zu wifi-Netzwerk, kann aber keine Antwort gefunden die für mich funktioniert. Hier ist der code, den ich verwende verbinden..
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;
}
Jedoch netId ist immer -1. Ich habe es versucht auf zwei verschiedenen Handys (ICS:HTC Rezound und Lebkuchen:Motorola DroidX). Beide zeigen genau die gleichen Ergebnisse.
Was mache ich falsch ?
Edit: ich habe versucht den gleichen code mit WPA2, access point und bekam sehr seltsame Ergebnisse. Wenn dieser code ausgeführt wurde, zum ersten mal würde es -1 zurück, wenn ich aber den Aufruf derselben Methode zweiten mal mit einer Verzögerung von 1 Sekunde, würde es wieder gültig netId. Also die Fragen sind
- warum obige code nicht verbinden zu wpa ?
- in wpa2, warum muss ich call-oben-Methode zweimal zu gelangen ? Edit: ich habe beobachtet, dass ich hatte, um eine Verbindung mehrfach zu verbinden. Manchmal dauert es auch 3-4 mal auf verbinden. So jetzt bin ich Schleife, bis das hinzufügen von config gibt >0 id.
InformationsquelleAutor der Frage Mukesh Aggarwal | 2012-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht ein bisschen spät aber versuchen, diese Verbindung zu Öffnen/WPA/WPA2/WEP-gesicherte Netzwerke,
Offensichtlich setzen Sie Ihre eigenen Variablen für die verschiedenen security-Typen anwendbar. Der Schlüssel (verzeihen Sie das Wortspiel), eine Verbindung zu einem WEP-geschützten Netzwerk ist die getHexKey Methode wie unten.
InformationsquelleAutor der Antwort Mark OB
Habe ich festgestellt, dass wenn das shared-Schlüssel ist weniger als 8 Zeichen ist, wird -1 zurück.
InformationsquelleAutor der Antwort Eric Woodruff
Ich hatte das gleiche problem. Ich fand heraus, dass Ihr WLAN muss eingeschaltet sein, während Sie telefonieren addNetwork.
InformationsquelleAutor der Antwort clovicek
Ich hatte gerade das gleiche problem. Scheinbar war alles okay, aber dann - war es nicht.
Was ich gefunden habe ist diese:
Android WifiStateMachine wird Ihnen nicht erlauben, hinzuzufügen oder zu ändern, Netzwerke, es sei denn, supplicant läuft und angeschlossen. Dies wirkt sich auf Dienste, die auf start-up-und Dienstleistungen ausgeführt, selbst wenn WIFI aus ist.
Android WifiConfigStore tracks Besitzer der wifi-Netzwerk von UID. Es bedeutet, dass Sie möglicherweise nicht in der Lage sein zu ändern-Netzwerk erstellt, durch ein anderes Prozess.
Den richtigen Weg, um hinzufügen ein Netzwerk ist:
android.pemissions.OVERRIDE_WIFI_CONFIG
Erlaubnis in Ihre manifest-Datei.WifiManager.setWifiEnabled(true)
.WifiManager.pingSupplicant()
gibt true zurück.WifiConfiguration
dann übergeben Sie es anWifiManager.addNetwork()
. Stellen Sie sicher, dass der zurückgegebene Wert ist nicht (-1).addNetwork()
als argument zuWifiConfiguration.enableNetwork()
nennen (es sei denn, es ist -1). Beachten Sie, dass die booleschen parameter bedeutetdisableOthers
und sollte falsees sei denn, Sie haben das Recht, sich zu ändern, alle anderen Netze: es kann fehlschlagen, intern, wenn man es auf wahr.Dies sollte ermöglichen das hinzufügen (und verbinden) programmgesteuert zu einem neuen Wifi-Netzwerk.
InformationsquelleAutor der Antwort Tomasz W