Der ConnectivityManager bietet
eine API, mit der Sie anfordern können, dass sich das Gerät unter
verschiedenen Bedingungen mit einem Netzwerk verbindet. Dazu gehören Gerätefunktionen und Datenübertragungsoptionen.
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 Sie den Übertragungstyp des Netzwerks angeben möchten, z. B. eine WLAN- oder Mobilfunk verbindung, und die Funktionen des aktuell verbundenen Netzwerks, z. B. eine Internet verbindung, 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 eine WLAN-,
Ethernet- oder Mobilfunkverbindung für den Übertragungstyp 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();
Einige Verbindungen können deutlich teurer sein als andere (z.
B. eine Mobilfunkverbindung). Verwenden Sie
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
, um zu ermitteln, ob die Verbindung teuer ist. Wenn Sie eine Verbindung mit nutzungsabhängiger Abrechnung verwenden,
versuchen Sie, den Datenverbrauch Ihrer App zu reduzieren oder ihn zu verzögern, bis das Gerät eine
Verbindung ohne nutzungsabhängige Abrechnung hat.
Netzwerk-Callback konfigurieren
Wenn Sie die NetworkRequest beim ConnectivityManager registrieren, müssen Sie
ein
NetworkCallback
implementieren, um Benachrichtigungen über Änderungen des Verbindungsstatus und der Netzwerk
funktionen zu erhalten.
Die am häufigsten implementierten Funktionen in der NetworkCallback sind die
folgenden:
onAvailable()gibt an, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die in derNetworkRequestangegebenen Anforderungen an Funktionen und Übertragungstyp erfüllt.onLost()gibt an, dass die Verbindung des Geräts zum Netzwerk unterbrochen wurde.onCapabilitiesChanged()gibt an, dass sich die Funktionen des Netzwerks geändert haben. DasNetworkCapabilitiesObjekt 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 Netzwerkaktualisierungen registrieren
Nachdem Sie die NetworkRequest und NetworkCallback deklariert haben, verwenden Sie die
requestNetwork()
oder registerNetworkCallback()
Funktionen, 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 das 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);