Ich muss feststellen, ob mein Gerät über eine Internetverbindung verfügt oder nicht. Ich habe viele Antworten gefunden wie:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
(Entnommen aus Erkennen, ob unter Android eine Internetverbindung verfügbar ist .)
Dies ist jedoch nicht richtig. Wenn ich beispielsweise mit einem drahtlosen Netzwerk verbunden bin , das keinen Internetzugang hat , gibt diese Methode true zurück. Gibt es eine Möglichkeit, festzustellen, ob das Gerät über eine Internetverbindung verfügt und nicht, ob es nur verbunden ist? zu etwas?
android
internet-connection
android-internet
Buda Gavril
quelle
quelle
isNetworkConnected
Funktionsbaustein enthält für alle veralteten CodeBuild.VERSION.SDK_INT >= Build.VERSION_CODES.M
. Eine ausführlichere Diskussion zu diesem Thema und zur Behebung finden Sie hier stackoverflow.com/questions/53532406/…Antworten:
Du hast recht. Der von Ihnen angegebene Code prüft nur, ob eine Netzwerkverbindung besteht. Der beste Weg, um zu überprüfen, ob eine aktive Internetverbindung besteht, besteht darin, über http eine Verbindung zu einem bekannten Server herzustellen.
Natürlich können Sie die ersetzen
http://www.google.com
URL durch jeden anderen Server Sie eine Verbindung herstellen möchten, oder ein Server, von dem Sie wissen, dass er eine gute Betriebszeit hat.Wie Tony Cho auch in diesem Kommentar unten betonteStellen Sie sicher, dass Sie diesen Code nicht im Hauptthread ausführen, da hat. Andernfalls wird eine NetworkOnMainThread-Ausnahme (in Android 3.0 oder höher) angezeigt. Verwenden Sie stattdessen eine AsyncTask oder Runnable.
Wenn Sie google.com verwenden möchten, sollten Sie sich die Modifikation von Jeshurun ansehen. In seiner Antwort hat er meinen Code geändert und ihn ein bisschen effizienter gemacht. Wenn Sie eine Verbindung zu herstellen
und überprüfen Sie dann den Antwortcode für 204
Dann müssen Sie nicht zuerst die gesamte Google-Startseite abrufen.
quelle
ConnectivityManager
nicht erforderlich ist). Andernfalls erhalten Sie auf Android 4.x + -Geräten eineNetworkOnMainThread
Ausnahme.Ich habe die Antwort von THelper leicht geändert, um einen bekannten Hack zu verwenden, den Android bereits verwendet, um zu überprüfen, ob das verbundene WiFi-Netzwerk über einen Internetzugang verfügt. Dies ist viel effizienter als das Abrufen der gesamten Google-Startseite. Weitere Informationen finden Sie hier und hier .
quelle
Geben Sie true zurück, wenn das Internet tatsächlich verfügbar ist
Stellen Sie sicher, dass Sie diese beiden Berechtigungen haben
Wenn http aufgrund der neuen Android-Sicherheit nicht funktioniert, erlauben sie derzeit keine Nur-Text-Kommunikation. vorerst nur um es zu umgehen.
quelle
Wenn Sie auf Lollipop oder höher abzielen, können Sie die neue NetworkCapabilities-Klasse verwenden, z.
quelle
connectivityManager.getActiveNetwork();
erfordert API lvl23, die Marshmallow und nicht Lollipop ist.capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
schien den Trick für mich zu tun!Sie müssen nicht unbedingt eine vollständige HTTP-Verbindung herstellen. Sie können versuchen, einfach eine TCP-Verbindung zu einem bekannten Host herzustellen. Wenn dies erfolgreich ist, verfügen Sie über eine Internetverbindung.
Dann erkundigen Sie sich einfach bei:
quelle
AsyncTask
Basierend auf den akzeptierten Antworten habe ich diese Klasse mit einem Listener erstellt, damit Sie sie im Hauptthread verwenden können:
Zuerst : InterntCheck-Klasse, die im Hintergrund nach Internetverbindungen sucht und dann eine Listener-Methode mit dem Ergebnis aufruft.
Zweitens : Instanziieren Sie eine Instanz der Klasse im Hauptthread und warten Sie auf die Antwort (wenn Sie mit Firebase API für Android gearbeitet haben, bevor Ihnen dies bekannt sein sollte!).
In der onComplete-Methode erhalten Sie nun, ob das Gerät mit dem Internet verbunden ist oder nicht.
quelle
Probier diese
quelle
Sie können dies mit der
ConnectivityManager
API für Android tun . Hier können Sie überprüfen, ob Sie mit dem Internet verbunden sind und mit welcher Art von Internetverbindung Sie verbunden sind. Grundsätzlich gemessen oder nicht gemessen.So überprüfen Sie die Internetverbindung.
Dokumentationslink: https://developer.android.com/training/monitoring-device-state/connectivity-status-type
quelle
Hoffe, der obige Code hilft Ihnen, stellen Sie auch sicher, dass Sie Internet-Erlaubnis in Ihrer App haben.
quelle
Der neueste Weg, dies aus der Dokumentation zu tun, besteht darin
ConnectivityManager
, das aktive Netzwerk abzufragen und festzustellen, ob es über eine Internetverbindung verfügt.Fügen Sie Ihrer AndroidManifest.xml-Datei diese beiden Berechtigungen hinzu:
quelle
Überprüfen Sie den WLAN-Typ im Konnektivitätsmanager:
In der Android-Dokumentation wird 'TYPE_WIFI' als 'WIFI-Datenverbindung' beschrieben. Geräte unterstützen möglicherweise mehrere. '
quelle
Eine gute Lösung, um zu überprüfen, ob das aktive Netzwerk über eine Internetverbindung verfügt:
quelle
Sie können ConnectivityManager verwenden.
Überprüfen Sie dies und das
quelle
Verwenden Sie die folgende Klasse , die auf die letzte API-Ebene aktualisiert wurde: 29.
quelle