Verbindungsstatus und Verbindungsmessung überwachen

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 in NetworkRequest 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 Objekt NetworkCapabilities 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);