Monitorowanie stanu połączeń i pomiaru wykorzystania połączenia

ConnectivityManager zapewnia interfejs API, który pozwala zażądać połączenia urządzenia z siecią na podstawie różne warunki, które obejmują możliwości urządzenia i opcje przesyłania danych.

Implementacja wywołania zwrotnego dostarcza aplikacji informacje o jak również stan połączenia, a także możliwości Interfejs API pozwala określić, czy urządzenie połączone z siecią, która spełnia wymagania aplikacji.

Konfigurowanie żądania sieciowego

Aby określić typ transportu w sieci, np. Wi-Fi lub sieć komórkową i możliwości aktualnie połączonej sieci, np. internetu musisz skonfigurować żądanie sieciowe.

Zadeklaruj element NetworkRequest, który: opisuje potrzeby aplikacji w zakresie połączenia sieciowego. Ten kod tworzy żądania dotyczącego sieci połączonej z internetem i korzystającej z Wi-Fi lub połączenie komórkowe dla typu transportu.

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();

Pamiętaj, że niektóre połączenia mogą być znacznie droższe od innych (na np. połączenie komórkowe jest zwykle drogie). Używaj NetworkCapabilities#NET_CAPABILITY_NOT_METERED aby ustalić, czy połączenie jest drogie. W przypadku połączenia z pomiarem użycia danych spróbuj ograniczyć wykorzystanie danych przez aplikację lub opóźnić ją do momentu, bez pomiaru użycia danych.

Skonfiguruj wywołanie zwrotne sieci

Gdy zarejestrujesz NetworkRequest za pomocą ConnectivityManager, musisz zaimplementuj NetworkCallback. aby otrzymywać powiadomienia o zmianach stanu połączenia i sieci funkcje zabezpieczeń.

Najczęściej zaimplementowane funkcje w NetworkCallback to: :

  • onAvailable() wskazuje, że urządzenie jest podłączone do nowej sieci, która spełnia wymagania dotyczące możliwości i typów transportu określone w dokumencie NetworkRequest.
  • onLost() oznacza, że urządzenie utraciło połączenie z siecią.
  • onCapabilitiesChanged() wskazuje, że możliwości sieci uległy zmianie. NetworkCapabilities obiekt dostarcza informacji na temat bieżących możliwości sieci.

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);
    }
};

Zarejestruj się, aby otrzymywać aktualizacje sieci

Po zadeklarowaniu zasad NetworkRequest i NetworkCallback użyj funkcji requestNetwork(). lub registerNetworkCallback() funkcji wyszukiwania sieci na urządzeniu, które spełnia NetworkRequest Stan jest następnie przesyłany do NetworkCallback.

Kotlin

val connectivityManager = getSystemService(ConnectivityManager::class.java) as ConnectivityManager
connectivityManager.requestNetwork(networkRequest, networkCallback)

Java

ConnectivityManager connectivityManager =
        (ConnectivityManager) getSystemService(ConnectivityManager.class);
connectivityManager.requestNetwork(networkRequest, networkCallback);