Die ConnectivityManager
bietet eine API, mit der Sie anfordern können, dass das Gerät basierend auf verschiedenen Bedingungen eine Verbindung zu einem Netzwerk herstellt. Dazu gehören Gerätefunktionen und Datenübertragungsoptionen.
Die Callback-Implementierung stellt Ihrer App Informationen zum Verbindungsstatus des Geräts sowie zu den Funktionen des derzeit verbundenen Netzwerks zur Verfügung. 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 Sie den Transporttyp des Netzwerks (z. B. WLAN oder Mobilfunkverbindung) und die Funktionen des aktuell verbundenen Netzwerks (z. B. Internetverbindung) angeben möchten, müssen Sie eine Netzwerkanfrage konfigurieren.
Deklarieren Sie eine NetworkRequest
, die die Anforderungen an die Netzwerkverbindung Ihrer App beschreibt. Der folgende Code erstellt eine Anfrage für ein Netzwerk, das mit dem Internet verbunden ist und für den Transporttyp entweder eine WLAN- oder eine Mobilfunkverbindung 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 deutlich teurer sein können als andere. Beispielsweise ist eine Mobilfunkverbindung in der Regel teuer. Mit NetworkCapabilities#NET_CAPABILITY_NOT_METERED
können Sie feststellen, ob die Verbindung teuer ist. Wenn Sie eine getaktete Verbindung nutzen, versuchen Sie, den Datenverbrauch Ihrer App zu reduzieren oder verzögern Sie die Datenübertragung, bis das Gerät eine Verbindung ohne Datenlimit hat.
Netzwerk-Callback konfigurieren
Wenn Sie die NetworkRequest
beim ConnectivityManager
registrieren, müssen Sie einen NetworkCallback
implementieren, um Benachrichtigungen zu Änderungen des Verbindungsstatus und der Netzwerkfunktionen zu erhalten.
Zu den am häufigsten implementierten Funktionen in NetworkCallback
gehören:
onAvailable()
weist darauf hin, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die in derNetworkRequest
angegebenen Anforderungen an Funktionen und Transporttyp erfüllt.onLost()
weist darauf hin, dass die Verbindung des Geräts zum Netzwerk unterbrochen wurde.onCapabilitiesChanged()
weist darauf hin, dass sich die Funktionen des Netzwerks geändert haben. DasNetworkCapabilities
-Objekt enthä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 Netzwerkupdates registrieren
Nachdem Sie NetworkRequest
und NetworkCallback
deklariert haben, verwenden Sie die Funktionen requestNetwork()
oder registerNetworkCallback()
, um nach einem Netzwerk zu suchen, mit dem eine Verbindung vom Gerät hergestellt werden kann, das den NetworkRequest
-Bedingungen entspricht. Der Status wird dann an die NetworkCallback
gesendet.
Kotlin
val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager connectivityManager.requestNetwork(networkRequest, networkCallback)
Java
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(ConnectivityManager.class); connectivityManager.requestNetwork(networkRequest, networkCallback);