Die ConnectivityManager
stellt eine API bereit, mit der Sie die Verbindung des Geräts mit einem Netzwerk unter Berücksichtigung verschiedener Bedingungen, darunter Gerätefunktionen und Datenübertragungsoptionen, anfordern können.
Die Callback-Implementierung stellt deiner App Informationen über den Verbindungsstatus des Geräts sowie die Funktionen des aktuell verbundenen Netzwerks zur Verfügung. Mit der API kannst du feststellen, ob das Gerät derzeit mit einem Netzwerk verbunden ist, das die Anforderungen deiner App erfüllt.
Netzwerkanfrage konfigurieren
Sie müssen eine Netzwerkanfrage konfigurieren, um den Transporttyp des Netzwerks, z. B. eine WLAN- oder Mobilfunkverbindung, und die Funktionen des aktuell verbundenen Netzwerks, z. B. die Internetverbindung, anzugeben.
Deklariere einen NetworkRequest
, der die Anforderungen deiner App an die Netzwerkverbindung beschreibt. Mit dem folgenden Code wird eine Anfrage für ein Netzwerk erstellt, das mit dem Internet verbunden ist und entweder eine WLAN- oder Mobilfunkverbindung als Transporttyp verwendet.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
Beachten Sie, dass einige Verbindungen erheblich teurer sein können als andere (z. B. sind Mobilfunkverbindungen in der Regel teuer). Mit NetworkCapabilities#NET_CAPABILITY_NOT_METERED
können Sie ermitteln, ob die Verbindung teuer ist. Versuchen Sie bei einer kostenpflichtigen Verbindung, den Datenverbrauch der Anwendung zu reduzieren oder warten Sie, bis das Gerät eine nicht getaktete Verbindung hat.
Netzwerk-Callback konfigurieren
Wenn du das NetworkRequest
mit der ConnectivityManager
registrierst, musst du eine NetworkCallback
implementieren, um Benachrichtigungen über Änderungen des Verbindungsstatus und der Netzwerkfunktionen zu erhalten.
Zu den am häufigsten implementierten Funktionen in NetworkCallback
gehören:
onAvailable()
gibt an, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die inNetworkRequest
angegebenen Funktionen und Anforderungen an den Transporttyp erfüllt.onLost()
gibt an, dass das Gerät keine Netzwerkverbindung mehr hat.onCapabilitiesChanged()
gibt an, dass sich die Funktionen des Netzwerks geändert haben. Das ObjektNetworkCapabilities
liefert Informationen zu den aktuellen Funktionen des Netzwerks.
Kotlin
private val networkCallback = object : ConnectivityManager.NetworkCallback() { // network is available for use override fun onAvailable(network: Network) { super.onAvailable(network) } // Network capabilities have changed for the network override fun onCapabilitiesChanged( network: Network, networkCapabilities: NetworkCapabilities ) { super.onCapabilitiesChanged(network, networkCapabilities) val unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED) } // lost network connection override fun onLost(network: Network) { super.onLost(network) } }
Java
private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); } @Override public void onLost(@NonNull Network network) { super.onLost(network); } @Override public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) { super.onCapabilitiesChanged(network, networkCapabilities); final boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); } };
Für Netzwerkupdates registrieren
Nachdem du NetworkRequest
und NetworkCallback
deklariert hast, kannst du mit den Funktionen requestNetwork()
oder registerNetworkCallback()
nach einem Netzwerk suchen, um eine Verbindung über das Gerät herzustellen, das die NetworkRequest
erfüllt. Der Status wird dann an NetworkCallback
gemeldet.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);