Verwenden Sie compileSdkVersion 23 , versuchen Sie jedoch, bereits 9 zu unterstützen.
getNetworkInfo(int)
wurde in 23 veraltet. Der Vorschlag war, getAllNetworks()
und getNetworkInfo(Network)
stattdessen zu verwenden. Für beide ist jedoch mindestens API 21 erforderlich.
Gibt es eine Klasse, die wir im Support-Paket verwenden können, um dies zu unterstützen?
Ich weiß , dass eine Lösung vorgeschlagen wurde , bevor jedoch die Herausforderung meiner Mindest API Anforderungen von 9 stellt ein Problem dar.
Antworten:
Sie können verwenden:
Oder in einem Schaltergehäuse
quelle
activeNetwork.getType()
ist veraltet undConnectivityManager.TYPE_WIFI
veraltetcm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
Ab Oktober 2018 ist die akzeptierte Antwort veraltet.
getType()
und Typen selbst sind jetzt in API Level 28 veraltet. Von Javadoc:Zur Verwendung
NetworkCapabilities
müssen Sie eineNetwork
Instanz an diegetNetworkCapabilities()
Methode übergeben. Um diese Instanz zu erhalten, müssen Sie aufrufen,getActiveNetwork()
die in API Level 23 hinzugefügt wurde.Daher glaube ich, dass der richtige Weg, um sicher zu überprüfen, ob Sie mit Wi-Fi oder einem Mobilfunknetz verbunden sind, Folgendes ist:
Sie können auch nach anderen Arten von
TRANSPORT
suchen, die Sie hier finden .Wichtiger Hinweis: Wenn Sie mit Wi-Fi und einem VPN verbunden sind, kann Ihr aktueller Status sein
TRANSPORT_VPN
, daher möchten Sie möglicherweise auch danach suchen.Vergessen Sie nicht, Ihrer AndroidManifest-Datei die folgende Berechtigung hinzuzufügen:
quelle
NetworkInfo
abgeschrieben, können Sie nicht mehr verwendenNetWorkInfo
, wie bietet dies also eine Alternative?Update Februar 2020:
Die akzeptierte Antwort ist in erneut veraltet
28 (Android P)
, die Ersetzungsmethode funktioniert jedoch nur23 (Android M)
. Um ältere Geräte zu unterstützen, habe ich eine Hilfsfunktion in geschrieben.Wie benutzt man:
Es gibt ein zurück
int
, das Sieenum
in Ihrem Code ändern können :Sie können entweder die Kotlin- oder die Java-Version der Hilfsfunktion kopieren.
Kotlin:
Java:
quelle
No Internet
,Cellular
undWi-Fi
. Wenn Sie sich nicht für den Verbindungstyp interessieren, können Sie den Code an Ihre Anwendung anpassen.Boolean
Wrapper-Klasse verwenden,boolean
die primitiv ist. In der if-Anweisung müssen Sie check for hinzufügennull
. Was ist auch, wenn morgen ein weiterer neuer Transportmodus in NetworkCapabilities eingeführt wird? Die Verwendung von Integer für die Verzweigung hilft also, und Sie können sich auch für Switch-Fälle entscheiden.Aktualisierte Antwort (19: 07: 2018):
Mit dieser Methode können Sie überprüfen, ob die Internetverbindung verfügbar ist.
Alte Antwort:
Für eine optimale Wiederverwendung von Code improvisieren Sie die Antwort auf Käsebrot.
Der Code kann in die Util-Klasse eingeordnet werden und kann verwendet werden, um zu überprüfen, ob das Telefon von einem beliebigen Teil Ihrer Anwendung aus über WLAN oder mobiles Internet mit dem Internet verbunden ist.
quelle
activeNetwork.isConnectedOrConnecting()
ist jetzt veraltetDie akzeptierte Antwort ist in Version 28 veraltet. Hier ist die Lösung, die ich in meinem Projekt verwende.
quelle
Antwort Februar 2019
So überprüfen Sie, ob Sie online sind:
Um die Art der Internetverbindung vor / nach Android M zu erhalten
Für alle Fälle ist eine Berechtigung zum Zugriff auf den Netzwerkstatus erforderlich
Da
NetworkInfo
es veraltet ist und ab API 29 von nun anConnectivityManager.NetworkCallback
mit seiner NetzwerkstatusänderungonAvailable()
undonLost()
Rückrufen verwendet werden muss.Verwendung:
Eigenschaften
LifecycleObserver
, um Speicherverluste durch eine Bereinigung deronDestroy()
Methode zu vermeiden .BoradcastReceiver
undNetworkInfo
und verwendetConnectivityManager.NetworkCallback
für API 21 und höher verwendet.android.permission.ACCESS_NETWORK_STATE
angeben. Sie müssen es jedoch einschließen, wenn Sie die Utility-Klasse verwenden möchten.Fähigkeiten
quelle
onLost
wird er angerufen.onLost
bedeutet nicht, dass das Gerät die Internetverbindung verloren hat, aber ein Netzwerk hat die Verbindung verloren.Überprüfen Sie, ob Ihr Netzwerk mit dem Internet verbunden ist:
quelle
NetworkCapabilities.NET_CAPABILITY_VALIDATED
.Kotlin-Version:
quelle
Verwenden Sie getActiveNetworkInfo (), wie von Cheese Bread vorgeschlagen.
Rufen Sie jetzt die Methode auf. Versuchen Sie zur sicheren Verwendung catch
Und vergessen Sie nicht hinzuzufügen:
quelle
getNetworkInfo(ConnectivityManager.TYPE_ETHERNET).isAvailable
Um auf der sicheren Seite zu sein, würde ich vorschlagen, auch Methode zu verwenden
Die gesamte Methode könnte wie folgt aussehen:
quelle
activeNetwork.getType()
ist veraltet undConnectivityManager.TYPE_WIFI
veraltetSo überprüfe ich, ob das aktuelle Netzwerk in den neuesten Android-Versionen Mobilfunk verwendet oder nicht:
quelle
(Fast) Alle Antworten sind in Android P veraltet. Hier ist eine
C#
Lösung ( die für Java-Entwickler leicht zu befolgen ist ).Der Schlüssel hier ist
Android.Net.TransportType
quelle
Möglicherweise müssen wir die Internetverbindung mehrmals überprüfen. So wird es für uns einfacher, wenn wir den Codeblock in einer Erweiterungsmethode von schreiben
Context
. Unten sind meine Helfer-Erweiterungen fürContext
undFragment
.Überprüfen der Internetverbindung
Andere Erweiterungen
quelle
Überprüfen Sie, ob Internet verfügbar ist
quelle
ConnectivityManager.getActiveNetwork () wird unter Android M (API 28) nicht gefunden. networkInfo.getState () ist über Android L veraltet.
Die endgültige Antwort lautet also:
quelle
Viele Antworten verwenden immer noch getNetworkType unter 23, was veraltet ist. Verwenden Sie den folgenden Code, um zu überprüfen, ob das Gerät über eine Internetverbindung verfügt.
..
Vergessen Sie nicht, diese Zeile in Manifest einzufügen
quelle
Da Sie mit den veröffentlichten Antworten nur das aktive Netzwerk abfragen können, erfahren Sie hier, wie Sie
NetworkInfo
für jedes Netzwerk und nicht nur für das aktive Netzwerk (z. B. Wifi-Netzwerk) zugreifen können (Entschuldigung, Kotlin-Code voraus).Dies erfordert API 21 oder höher und die Berechtigung
android.permission.ACCESS_NETWORK_STATE
quelle
cm.getNetworkCapabilities(cm.activeNetwork).hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)
NetManager , mit dem Sie die Internetverbindung unter Android mit Kotlin überprüfen können
Wenn Sie minSdkVersion> = 23 verwenden
Wenn Sie minSdkVersion <23 verwenden
quelle
https://www.agnosticdev.com/content/how-detect-network-connectivity-android
Bitte folgen Sie diesem Tutorial, es sollte jedem helfen, der nach Antworten sucht.
Beachten Sie, dass networkInfo veraltet ist. Ersetzen Sie daher isNetworkReacheable () durch die Antwort @vidha, indem Sie getApplicationContext () als Parameter übergeben
quelle
quelle
Das funktioniert bei mir in Kotlin. Viele APIs sind in der Network Manager-Klasse veraltet, sodass die folgende Antwort die gesamte API-Unterstützung abdeckt.
Sie werden auch unten hinzufügen
quelle
Der folgende Code funktioniert auf allen APIs. (Kotlin)
GetActiveNetworkInfo () ist jedoch nur in API 29 veraltet und funktioniert auf allen APIs, sodass wir es in allen APIs unter 29 verwenden können
quelle
Etwas wie das:
Und im Hauptprogrammkörper:
quelle
Dies funktioniert auch in Android 10. Es wird true zurückgegeben, wenn eine Verbindung zum Internet besteht. Andernfalls wird false zurückgegeben.
quelle