Ich möchte nicht, dass mein Benutzer versucht, etwas herunterzuladen, es sei denn, er hat eine Wi-Fi-Verbindung. Ich kann jedoch anscheinend nur feststellen, ob Wi-Fi aktiviert ist, aber sie könnten immer noch eine 3G-Verbindung haben.
android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
return false;
}
Der Staat ist jedoch nicht das, was ich erwarten würde. Obwohl Wi-Fi verbunden ist, werde ich OBTAINING_IPADDR
als Staat.
quelle
android.permission.ACCESS_NETWORK_STATE
zu Ihrer AndroidManifest.xml hinzufügen müssen, damit dies funktioniert.connectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Da die Methode NetworkInfo.isConnected () in API-23 jetzt veraltet ist, erkennt diese Methode, ob der Wi-Fi-Adapter eingeschaltet ist und stattdessen auch über WifiManager mit einem Zugriffspunkt verbunden ist:
quelle
NetworkInfo.isConnected()
sieht für mich nicht veraltet aus.android.permission.ACCESS_WIFI_STATE
Ich benutze einfach folgendes:
Was einen dieser Zustände zurückgibt, wenn Sie getSupplicantState () aufrufen;
quelle
Ich verwende dies in meinen Apps, um zu überprüfen, ob das aktive Netzwerk Wi-Fi ist:
quelle
active
Netzwerk (das zum Herunterladen verwendet wird) WiFi istNetworkInfo#isConnected
veraltet istIch habe mir ein paar Fragen wie diese angesehen und mir Folgendes ausgedacht:
Ich verwende if für meine Lizenzprüfung in Root Toolbox PRO und es scheint großartig zu funktionieren.
quelle
getNetworkInfo()
eine Null zurückgegeben wird, wenn das Netzwerk nicht vorhanden ist. Wenn das Gerät keine mobile Verbindung hat, wird ein Fehler ausgegeben. In den meisten Fällen verursacht TYPE_ETHERNET in diesem Fall eine Null, da die meisten Geräte keine Ethernet-Verbindung haben.Während Jasons Antwort richtig ist, ist getNetWorkInfo (int) heutzutage eine veraltete Methode. Die nächste Funktion wäre also eine schöne Alternative:
quelle
Mit können
WifiManager
Sie tun:Die Methode getNeworkId gibt -1 nur zurück, wenn sie nicht mit einem Netzwerk verbunden ist.
quelle
quelle
boolean isConnectedOrConnecting ()
Gibt an, ob eine Netzwerkverbindung besteht oder gerade hergestellt wird. Dies ist gut für Anwendungen, die andere Aufgaben im Zusammenhang mit dem Netzwerk als das Lesen oder Schreiben von Daten ausführen müssen. Rufen Sie für letztereisConnected()
stattdessen an, um sicherzustellen, dass das Netzwerk vollständig nutzbar ist.Der folgende Code (in Kotlin) funktioniert von API 21 bis mindestens zur aktuellen API-Version (API 29). Die Funktion getWifiState () gibt einen von drei möglichen Werten für den WiFi-Netzwerkstatus zurück: Disable, EnabledNotConnected und Connected, die in einer Enum-Klasse definiert wurden. Dies ermöglicht detailliertere Entscheidungen, z. B. die Information des Benutzers, WLAN zu aktivieren oder, falls bereits aktiviert, eine Verbindung zu einem der verfügbaren Netzwerke herzustellen. Wenn jedoch nur ein Boolescher Wert benötigt wird, der angibt, ob die WiFi-Schnittstelle mit einem Netzwerk verbunden ist, erhalten Sie die andere Funktion isWifiConnected (). Es verwendet das vorherige und vergleicht das Ergebnis mit Connected.
Es ist inspiriert von einigen der vorherigen Antworten, versucht jedoch, die Probleme zu lösen, die durch die Entwicklung der Android-APIs oder die langsam steigende Verfügbarkeit von IP V6 entstehen. Der Trick war zu verwenden:
anstatt:
Gemäß der Dokumentation: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid wird null zurückgegeben, wenn keine Verbindung zu einem Netzwerk besteht. Und selbst wenn wir keine Berechtigung haben, den tatsächlichen Wert abzurufen, wird immer noch etwas anderes als null zurückgegeben, wenn wir verbunden sind.
Beachten Sie auch Folgendes:
Vergessen Sie nicht, im Manifest Folgendes hinzuzufügen:
Vorgeschlagener Code ist:
quelle
Die
NetworkInfo
Klasse ist ab API-Ebene 29 zusammen mit den zugehörigen Zugriffsmethoden wieConnectivityManager#getNetworkInfo()
und veraltetConnectivityManager#getActiveNetworkInfo()
.In der Dokumentation wird nun vorgeschlagen, die
ConnectivityManager.NetworkCallback
API für die asynchronisierte RückrufüberwachungConnectivityManager#getNetworkCapabilities
oderConnectivityManager#getLinkProperties
für den synchronisierten Zugriff auf Netzwerkinformationen zu verwendenUm zu überprüfen, ob WLAN verbunden ist, verwende ich folgenden Code:
Kotlin:
Java:
Denken Sie daran
ACCESS_NETWORK_STATE
, Ihrer Manifest-Datei auch Berechtigungen hinzuzufügen .quelle
Probieren Sie diese Methode aus.
Diese Methode hilft dabei, eine verfügbare Internetverbindung zu finden oder nicht.
quelle
Das funktioniert bei mir:
Und fügen Sie diese Berechtigung hinzu:
quelle
Viele Antworten verwenden veralteten Code oder Code, der in höheren API-Versionen verfügbar ist. Jetzt benutze ich so etwas
quelle
Folgendes verwende ich als Dienstprogramm in meinen Apps:
quelle
In der neuen Version Android
und füge auch Premission hinzu
quelle
connManager.getAllNetworks()
erfordert API Level 21.Ähnlich wie bei @Jason Knight, aber auf Kotlin-Art:
quelle
ConnectivityManager.TYPE_WIFI
ist veraltetDies ist eine einfachere Lösung. Siehe Frage zum Stapelüberlauf Überprüfen , ob Wi-Fi unter Android aktiviert ist oder nicht .
PS Vergessen Sie nicht, den Code zur Datei manifest.xml hinzuzufügen, um die Berechtigung zuzulassen. Wie nachfolgend dargestellt.
quelle
Versuchen
Dies gibt 0 zurück, bis das Gerät eine verwendbare Verbindung hat (auf meinem Computer ein Samsung SM-T280, Android 5.1.1).
quelle
Sie können WIFI aktivieren, wenn es nicht wie folgt aktiviert ist: 1. Überprüfen Sie den WIFI-Status, wie von @Jason Knight beantwortet. 2. Wenn er nicht aktiviert ist, aktivieren Sie ihn. Vergessen Sie nicht, die WIFI-Berechtigung in die Manifestdatei aufzunehmen
Ihre Java-Klasse sollte so sein
}}
quelle
Fügen Sie dies für JAVA hinzu:
Fügen Sie in der Manifest-Datei die folgenden Berechtigungen hinzu:
quelle
Ein bisschen alt eine Frage, aber das ist, was ich benutze. erfordert min api level 21 berücksichtigt auch veraltete Networkinfo apis.
quelle