Verbindungsstatus und Verbindungsmessung überwachen

Der ConnectivityManager stellt eine API bereit, mit der Sie anfordern können, dass das Gerät anhand verschiedener Bedingungen, einschließlich Gerätefunktionen und Datentransportoptionen, eine Verbindung zu einem Netzwerk herstellt.

Die Callback-Implementierung liefert der App Informationen über den Verbindungsstatus des Geräts sowie die 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

Sie müssen eine Netzwerkanfrage konfigurieren, um den Transporttyp des Netzwerks, z. B. die WLAN- oder Mobilfunkverbindung, und die Funktionen des aktuell verbundenen Netzwerks anzugeben, z. B. die Internetverbindung.

Deklarieren Sie einen NetworkRequest, der die Netzwerkverbindungsanforderungen Ihrer App 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 als 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();

Beachten Sie, dass einige Verbindungen erheblich teurer sein können als andere (z. B. ist eine Mobilfunkverbindung in der Regel teuer). Mit NetworkCapabilities#NET_CAPABILITY_NOT_METERED können Sie ermitteln, ob die Verbindung teuer ist. Wenn Sie eine kostenpflichtige Verbindung nutzen, versuchen Sie, den Datenverbrauch Ihrer App zu reduzieren, oder verzögern Sie die Verbindung, bis das Gerät eine pauschal abgerechnete Verbindung hat.

Netzwerk-Callback konfigurieren

Wenn Sie das NetworkRequest mit der ConnectivityManager registrieren, müssen Sie einen NetworkCallback implementieren, um Benachrichtigungen über Änderungen des Verbindungsstatus und der Netzwerkfunktionen zu erhalten.

Zu den am häufigsten implementierten Funktionen in NetworkCallback gehören:

  • onAvailable() gibt an, dass das Gerät mit einem neuen Netzwerk verbunden ist, das die in NetworkRequest angegebenen Funktionen und Anforderungen an den Transporttyp erfüllt.
  • onLost() gibt an, dass das Gerät nicht mehr mit dem Netzwerk verbunden ist.
  • onCapabilitiesChanged() gibt an, dass sich die Funktionen des Netzwerks geändert haben. Das Objekt NetworkCapabilities liefert 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 Netzwerkupdates registrieren

Nachdem Sie NetworkRequest und NetworkCallback deklariert haben, verwenden Sie die Funktionen requestNetwork() oder registerNetworkCallback(), um nach einem Netzwerk zu suchen, um eine Verbindung über das Gerät herzustellen, das die NetworkRequest erfüllt. 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);