Die ConnectivityManager bietet eine API, mit der Sie anfordern können, dass das Gerät basierend auf verschiedenen Bedingungen, einschließlich Gerätefunktionen und Datentransportoptionen, eine Verbindung zu einem Netzwerk herstellt.
Die Callback-Implementierung liefert Ihrer App Informationen zum Verbindungsstatus des Geräts sowie zu den Funktionen des aktuell verbundenen Netzwerks. Mit der API können Sie feststellen, ob das Gerät derzeit mit einem Netzwerk verbunden ist, das die Anforderungen Ihrer App erfüllt.
Netzwerkanfrage konfigurieren
Wenn du den Transporttyp des Netzwerks, z. B. WLAN oder Mobilfunkverbindung, und die Funktionen des aktuell verbundenen Netzwerks, z. B. Internetverbindung, angeben möchtest, musst du eine Netzwerkanfrage konfigurieren.
Deklarieren Sie eine NetworkRequest, die die Anforderungen Ihrer App an die Netzwerkverbindung beschreibt. Mit dem folgenden Code wird eine Anfrage für ein Netzwerk erstellt, das mit dem Internet verbunden ist und eine WLAN-, Ethernet- oder Mobilfunkverbindung für den Transporttyp verwendet.
Kotlin
val networkRequest = NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build()
Java
NetworkRequest networkRequest = new NetworkRequest.Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) .build();
Beachten Sie, dass einige Verbindungen deutlich teurer sein können als andere (z. B. ist eine Mobilfunkverbindung in der Regel teuer). Verwenden Sie NetworkCapabilities#NET_CAPABILITY_NOT_METERED, um festzustellen, ob die Verbindung teuer ist. Wenn du eine getaktete Verbindung verwendest, solltest du versuchen, den Datenverbrauch deiner App zu reduzieren oder zu warten, bis das Gerät eine pauschal abgerechnete Verbindung hat.
Netzwerk-Callback konfigurieren
Wenn Sie den NetworkRequest beim ConnectivityManager registrieren, müssen Sie einen NetworkCallback implementieren, um Benachrichtigungen über Änderungen am Verbindungsstatus und an den Netzwerkfunktionen zu erhalten.
Zu den am häufigsten implementierten Funktionen in der NetworkCallback gehören:
onAvailable()gibt an, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die imNetworkRequestangegebenen Anforderungen an Funktionen und Übertragungstypen erfüllt.onLost()gibt an, dass das Gerät die Verbindung zum Netzwerk verloren hat.onCapabilitiesChanged()gibt an, dass sich die Funktionen des Netzwerks geändert haben. Das ObjektNetworkCapabilitiesenthält 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 Netzwerkaktualisierungen registrieren
Nachdem du NetworkRequest und NetworkCallback deklariert hast, verwende die Funktionen requestNetwork() oder registerNetworkCallback(), um nach einem Netzwerk zu suchen, mit dem sich das Gerät verbinden kann und das die NetworkRequest erfüllt. Der Status wird dann an die 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);