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 zur Verbindungsstatus und den Funktionen der aktuell verbundenen Netzwerk. Mit der API können Sie feststellen, ob das Gerät derzeit die mit einem Netzwerk verbunden sind, 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.
Ein NetworkRequest
deklarieren, das
die Anforderungen an die Netzwerkverbindung Ihrer App beschreibt. Mit dem folgenden Code wird ein
für ein Netzwerk anfordern, das mit dem Internet verbunden ist und entweder ein WLAN verwendet
oder eine Mobilfunkverbindung auswählen.
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 (für
Beispiel: Mobilfunkverbindung ist in der Regel teuer. Verwenden Sie
NetworkCapabilities#NET_CAPABILITY_NOT_METERED
um zu ermitteln, 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 du die NetworkRequest
bei der ConnectivityManager
registrierst, musst du
eine
NetworkCallback
um Benachrichtigungen über Änderungen des Verbindungsstatus und des Netzwerks zu erhalten
Funktionen.
Zu den am häufigsten implementierten Funktionen in NetworkCallback
gehören:
Folgendes:
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()
bedeutet, dass die Verbindung des Geräts zum Netzwerk unterbrochen wurde.onCapabilitiesChanged()
zeigt an, dass sich die Funktionen des Netzwerks geändert haben. Die ObjektNetworkCapabilities
liefert Informationen über die 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 sich das Gerät verbinden lässt und das den NetworkRequest
-Anforderungen 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);