Die ConnectivityManager
bietet
eine API, mit der Sie eine Verbindung zwischen dem Gerät und einem Netzwerk herstellen können.
verschiedene Bedingungen, unter anderem 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
Transporttyp des Netzwerks angeben, z. B. WLAN oder Mobilfunknetz und die Funktionen des aktuell verbundenen Netzwerks, wie z. B. 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. Bei einer kostenpflichtigen Verbindung
Versuchen Sie, den Datenverbrauch Ihrer App zu reduzieren, oder warten Sie, bis das Gerät eine
pauschal abgerechnete Verbindung.
Netzwerk-Callback konfigurieren
Wenn du NetworkRequest
mit 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()
zeigt an, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die Anforderungen an Funktionen und Transporttypen, die inNetworkRequest
angegeben sind.onLost()
zeigt an, dass das Gerät keine Netzwerkverbindung mehr hat.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 Methode
requestNetwork()
oder registerNetworkCallback()
nach einem Netzwerk zu suchen, das die Anforderungen erfüllt,
NetworkRequest
Der Status wird dann an 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);