Ich möchte eine App entwerfen, die eine Liste der verfügbaren Wi-Fi-Netzwerke anzeigt und eine Verbindung zu dem vom Benutzer ausgewählten Netzwerk herstellt.
Ich habe den Teil implementiert, der die Scanergebnisse zeigt. Jetzt möchte ich eine Verbindung zu einem bestimmten Netzwerk herstellen, das der Benutzer aus der Liste der Scanergebnisse ausgewählt hat.
Wie mache ich das?
android
android-wifi
wifimanager
Vikram Gupta
quelle
quelle
Antworten:
Sie müssen eine
WifiConfiguration
Instanz wie folgt erstellen :Für das WEP-Netzwerk müssen Sie dann Folgendes tun:
Für ein WPA-Netzwerk müssen Sie eine Passphrase wie folgt hinzufügen:
Für Open Network müssen Sie Folgendes tun:
Dann müssen Sie es zu den Einstellungen des Android-WLAN-Managers hinzufügen:
Und schließlich müssen Sie es möglicherweise aktivieren, damit Android eine Verbindung dazu herstellt:
UPD: Wenn Ihr Passwort im Fall von WEP hexadezimal ist, müssen Sie es nicht mit Anführungszeichen umgeben.
quelle
Das frühere Antwort funktioniert , aber die Lösung kann tatsächlich einfacher sein. Das Durchlaufen der konfigurierten Netzwerkliste ist nicht erforderlich, da Sie die Netzwerk-ID erhalten, wenn Sie das Netzwerk über den WifiManager hinzufügen.
Die vollständige, vereinfachte Lösung würde also ungefähr so aussehen:
quelle
CHANGE_WIFI_STATE
Erlaubnis benötigt wird.Siehe: https://developer.android.com/reference/android/net/wifi/ScanResult.html#capabilities
Es gibt drei Arten von WIFI-Netzwerken.
Instanziieren Sie zunächst ein WifiConfiguration-Objekt und geben Sie die SSID des Netzwerks ein (beachten Sie, dass es in doppelte Anführungszeichen gesetzt werden muss), setzen Sie den Anfangszustand auf deaktiviert und geben Sie die Priorität des Netzwerks an (Zahlen um 40 scheinen gut zu funktionieren).
Nun zum komplizierteren Teil: Wir müssen mehrere Mitglieder von WifiConfiguration füllen, um den Sicherheitsmodus des Netzwerks anzugeben. Für offene Netzwerke.
Für Netzwerke mit WEP; Beachten Sie, dass der WEP-Schlüssel auch in doppelte Anführungszeichen eingeschlossen ist.
Für Netzwerke, die WPA und WPA2 verwenden, können wir für beide die gleichen Werte festlegen.
Schließlich können wir das Netzwerk zur bekannten Liste des WifiManager hinzufügen
quelle
Gutschrift an @ raji-ramamoorthi & @kenota
Die Lösung, die für mich funktioniert hat, ist die Kombination der oben genannten Mitwirkenden in diesem Thread.
Hierher zu kommen
ScanResult
ist der Prozess.Beachten Sie
unregister
es aufonPause
&onStop
leben Sie diesunregisterReceiver(broadcastReceiver);
quelle
Wenn Ihr Gerät die Wifi-Konfigurationen kennt (bereits gespeichert), können wir die Raketenwissenschaft umgehen. Durchlaufen Sie einfach die Konfigurationen und prüfen Sie, ob die SSID übereinstimmt. Wenn ja, verbinden und zurückkehren .
Berechtigungen festlegen:
Verbinden:
quelle
Ich habe mir den Kopf gebrochen, um zu verstehen, warum Ihre Antworten für WPA / WPA2 nicht funktionieren ... Nach stundenlangen Versuchen habe ich herausgefunden, was Ihnen fehlt:
ist für WPA-Netzwerke ERFORDERLICH !!!!
Jetzt gehts :)
quelle
Dies ist eine Aktivität, die Sie in Unterklassen unterteilen können, um die Verbindung zu einem bestimmten WLAN zu erzwingen: https://github.com/zoltanersek/android-wifi-activity/blob/master/app/src/main/java/com/zoltanersek/androidwifiactivity/ WifiActivity.java
Sie müssen diese Aktivität in Unterklassen unterteilen und ihre Methoden implementieren:
quelle
In API-Ebene 29 ist die
WifiManager.enableNetwork()
Methode veraltet . Gemäß Android API-Dokumentation ( hier überprüfen ):Ab API-Ebene 29 müssen Sie eine Verbindung zum WiFi-Netzwerk herstellen
WifiNetworkSpecifier
. Beispielcode finden Sie unter https://developer.android.com/reference/android/net/wifi/WifiNetworkSpecifier.Builder.html#build ()quelle
Ich habe auch versucht, eine Verbindung zum Netzwerk herzustellen. Keine der oben vorgeschlagenen Lösungen funktioniert für hugerock t70. Funktion wifiManager.disconnect (); trennt sich nicht vom aktuellen Netzwerk. Und kann daher keine Verbindung zum angegebenen Netzwerk herstellen. Ich habe den obigen Code geändert. Für mich funktioniert der Code bolow perfekt:
quelle
UID nnnnn does not have permission to update configuration xxxx. MD_START_CONNECT but no requests and connected, but app does not have sufficient permissions, bailing.
Versuchen Sie diese Methode. Es ist sehr leicht:
quelle