Ab Oktober 2018 ist die akzeptierte Antwort veraltet.
getType()
und Typen selbst sind jetzt in API Level 28 veraltet. Von Javadoc:
Anrufer sollten stattdessen die Überprüfung von NetworkCapabilities # hasTransport mit einer der Konstanten NetworkCapabilities # TRANSPORT * durchführen
Zur Verwendung NetworkCapabilities
müssen Sie eine Network
Instanz an die getNetworkCapabilities()
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:
public static boolean isNetworkConnected() {
final ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
if (Build.VERSION.SDK_INT < 23) {
final NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null) {
return (ni.isConnected() && (ni.getType() == ConnectivityManager.TYPE_WIFI || ni.getType() == ConnectivityManager.TYPE_MOBILE));
}
} else {
final Network n = cm.getActiveNetwork();
if (n != null) {
final NetworkCapabilities nc = cm.getNetworkCapabilities(n);
return (nc.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI));
}
}
}
return false;
}
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:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />