Ich muss erkennen, wann ich über WIFI eine Netzwerkverbindung habe. Welche Sendung wird gesendet, um festzustellen, ob eine gültige Netzwerkverbindung hergestellt wurde. Ich muss überprüfen, ob eine gültige Netzwerkverbindung für HTTP vorhanden ist. Worauf muss ich achten und welche zusätzlichen Tests muss ich durchführen, um zu wissen, dass eine gültige Verbindung besteht.
android
android-wifi
Androider
quelle
quelle
Antworten:
Sie können eine registrieren
BroadcastReceiver
, um benachrichtigt zu werden, wenn eine WiFi-Verbindung hergestellt wird (oder wenn sich die Verbindung geändert hat).Registrieren Sie die
BroadcastReceiver
:Und dann
BroadcastReceiver
machst du so etwas:Weitere Informationen finden Sie in der Dokumentation zu
BroadcastReceiver
undWifiManager
Natürlich sollten Sie vorher prüfen, ob das Gerät bereits mit WiFi verbunden ist.
BEARBEITEN: Dank Ban-Geoengineering können Sie hier überprüfen, ob das Gerät bereits angeschlossen ist:
quelle
private boolean isConnectedViaWifi() { ConnectivityManager connectivityManager = (ConnectivityManager) appObj.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return mWifi.isConnected(); }
Das Beste, was für mich funktioniert hat:
AndroidManifest
BroadcastReceiver-Klasse
Berechtigungen
quelle
Bei mir
WifiManager.NETWORK_STATE_CHANGED_ACTION
funktioniert nur .Registrieren Sie einen Rundfunkempfänger:
und erhalten:
quelle
Die Antworten der Benutzer @JPM und @usman sind wirklich sehr nützlich. Es funktioniert gut, aber in meinem Fall kommt es
onReceive
in meinem Fall 4 Mal mehrfach vor , sodass mein Code ausgeführt wird.Ich mache einige Modifikationen und mache nach meinen Anforderungen und jetzt kommt es nur noch 1 Mal
Hier ist Java-Klasse für Broadcast.
In AndroidManifest
quelle
Sie können eine WLAN-Verbindung herstellen, wenn Sie dem Benutzer die Möglichkeit geben, das normale Verhalten beim erneuten Fragen zu überschreiben.
Ich wähle drei Methoden ...
Dies ist eine schnelle Überprüfung, ob eine Internetverbindung zwischen Wifi oder CellData besteht. Von hier aus können Sie auswählen, welche Aktion Sie ausführen möchten. Ist es im Flugzeugmodus muss auch überprüft werden.
Auf einem separaten Thread. Ich setze eine Variable IpAddress auf = "" und frage ab, bis ich eine gültige IP-Adresse habe.
Ein weiteres Code-Snippet ... Wenn es nicht aktiviert ist, schalten Sie es ein (mit vorheriger Genehmigung des Benutzers).
quelle
Um den WIFI-Verbindungsstatus zu erkennen, habe ich CONNECTIVITY_ACTION aus der ConnectivityManager-Klasse verwendet, also:
und von Ihrem BroadCastReceiver:
ps: funktioniert gut für mich :)
quelle
Dieser Code erfordert überhaupt keine Erlaubnis. Es ist nur auf Änderungen des Wi-Fi-Netzwerkverbindungsstatus beschränkt (jedes andere Netzwerk wird nicht berücksichtigt). Der Empfänger wird statisch in der Datei AndroidManifest.xml veröffentlicht und muss nicht exportiert werden, da er vom System aufgerufen wird
protected broadcast
.NETWORK_STATE_CHANGED_ACTION
bei jeder Netzwerkkonnektivität Zustandsänderung.AndroidManifest:
BroadcastReceiver-Klasse:
Berechtigungen:
quelle
Hier ist ein Beispiel für meinen Code, der die Präferenz des Benutzers berücksichtigt, nur Kommunikation zuzulassen, wenn eine Verbindung zu Wifi besteht.
Ich rufe diesen Code aus einem
IntentService
bevor ich versuche, etwas herunterzuladen.Beachten Sie, dass dies
NetworkInfo
der Fall ist,null
wenn keine Netzwerkverbindung besteht.quelle
Android O hat die Möglichkeit entfernt, die impliziten Sendungen für eine Änderung des WLAN-Status zu empfangen. Wenn Ihre App geschlossen ist, können Sie sie nicht empfangen. Das neue
WorkManager
Gerät kann ausgeführt werden, wenn Ihre App geschlossen ist. Ich habe also ein wenig damit experimentiert und es scheint recht gut zu funktionieren:Fügen Sie dies Ihren Abhängigkeiten hinzu:
WifiConnectWorker.kt
MainActivity.kt
Beachten Sie, dass dies nur ein schneller Test für eine einmalige Benachrichtigung war. Es gibt noch viel zu tun, um immer benachrichtigt zu werden, wenn WLAN ein- und ausgeschaltet wird.
PS: Wenn die App zwangsweise beendet wird , wird der Worker anscheinend nicht gestartet
WorkManager
die Anforderungen dann abgebrochen.quelle
Ich habe diesen Code verwendet:
quelle
Ich habe zwei Methoden, um eine WIFI-Verbindung zu erkennen, die den Anwendungskontext empfängt:
1) meine alte Methode
2) meine neue Methode (ich verwende derzeit diese Methode):
quelle
Beachten Sie für alle, die die Übertragung von CONNECTIVITY_CHANGE genießen , dass dies nicht mehr ausgelöst wird, wenn sich die App in Android O im Hintergrund befindet.
https://developer.android.com/about/versions/o/background.html
quelle
1) Ich habe auch den Broadcast Receiver-Ansatz ausprobiert, obwohl ich CONNECTIVITY_ACTION / CONNECTIVITY_CHANGE kenne in API 28 veraltet und nicht empfohlen ist. Es ist auch an die Verwendung eines expliziten Registers gebunden und hört zu, solange die App ausgeführt wird.
2) Ich habe auch Firebase Dispatcher ausprobiert, der funktioniert, aber nicht über die getötete App hinaus.
3) Der empfohlene Weg ist WorkManager, um die Ausführung über den abgebrochenen Prozess hinaus und intern mit registerNetworkRequest () zu gewährleisten.
Der größte Beweis für den # 3-Ansatz wird von Android doc selbst verwiesen . Besonders für Apps im Hintergrund.
Auch hier
Bisher funktioniert es für uns mit der periodischen WorkManager-Anfrage einwandfrei.
Update: Am Ende habe ich 2 mittlere Medienbeiträge darüber geschrieben.
quelle