Die ConnectivityManager
bietet eine API, mit der Sie anfordern können, dass das Gerät basierend auf verschiedenen Bedingungen, einschließlich Gerätefunktionen und Datenübertragungsoptionen, eine Verbindung zu einem Netzwerk herstellt.
Die Callback-Implementierung stellt Ihrer App Informationen zum Verbindungsstatus des Geräts sowie zu den Funktionen des aktuell verbundenen Netzwerks zur Verfügung. Mit der API können Sie ermitteln, 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 angeben möchten, z. B. WLAN oder Mobilfunkverbindung, und die Funktionen des aktuell verbundenen Netzwerks, z. B. Internetverbindung, müssen Sie 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 entweder eine WLAN- oder eine Mobilfunkverbindung für den 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();
Einige Verbindungen können deutlich teurer sein 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 eine Verbindung mit Volumenbegrenzung besteht, sollten Sie den Datenverbrauch Ihrer App reduzieren oder die Datenübertragung aufschieben, bis das Gerät eine Verbindung ohne Volumenbegrenzung hat.
Netzwerk-Callback konfigurieren
Wenn Sie die NetworkRequest
mit der ConnectivityManager
registrieren, müssen Sie eine NetworkCallback
implementieren, um Benachrichtigungen über Änderungen des Verbindungsstatus und der Netzwerkfunktionen zu erhalten.
Die am häufigsten implementierten Funktionen in NetworkCallback
sind:
onAvailable()
gibt an, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die in derNetworkRequest
angegebenen Anforderungen an Funktionen und Transporttyp erfüllt.onLost()
bedeutet, dass die Verbindung des Geräts zum Netzwerk unterbrochen wurde.onCapabilitiesChanged()
gibt an, 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 Netzwerk-Updates registrieren
Nachdem Sie NetworkRequest
und NetworkCallback
deklariert haben, verwenden Sie die Funktionen requestNetwork()
oder registerNetworkCallback()
, um nach einem Netzwerk zu suchen, mit dem sich das Gerät verbinden kann und das 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);