Interfejs Connectivity Diagnostic API

Interfejs Connectivity Diagnostic API zezwala aplikacjom, które są właścicielami sieci lub nimi zarządzają, jako aplikacje operatora, aplikacje VPN i sugestie Wi-Fi, aby otrzymywać dane diagnostyczne informacje o połączeniach sieciowych z platformy. Te aplikacje mogą rejestrować oddzwaniać i otrzymywać powiadomienia z informacjami o połączeniu dla należących do nich lub zarządzanych przez nich sieci. Aplikacje nie będą otrzymywać powiadomień dotyczących sieci które nie należą do aplikacji ani nie są przez nią zarządzane.

Oto przykłady aplikacji, które zarządzają sieciami lub są ich właścicielami:

  • Aplikacje operatora: zarządzaj sieciami komórkowymi, w przypadku których subId ma uprawnienia operatora dla
  • Aplikacje z sugestiami Wi-Fi: własne sieci Wi-Fi proponowane system
  • Aplikacje VPN: zarządzaj wszystkimi sieciami używanymi przez VPN, ale tylko wtedy, to jest aktywna sieć VPN

Wywołania zwrotne są wywoływane w tych przypadkach:

  • Weryfikacja sieci: system zakończył ocenę konkretnej sieci. ConnectivityReport klasa dostarcza informacji o bieżącym stanie sieci oraz wyników testów lub procedur przeprowadzonych w ramach walidacji.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • podejrzenie zatrzymania danych: zapas danych, w którym pakiety IP są wysyłane; nie przechodzą prawidłowo przez sieć. DataStallReport klasa zawiera informacje o domniemanych zaległościach danych.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Zgłoszone połączenia: aplikacja zgłosiła łączność przez ConnectivityManager#reportNetworkConnectivity. do systemu. Sieć i zgłoszone połączenia (niezależnie od tego, czy aplikacja uważa, że sieć umożliwia lub nie zapewnia połączenia) jest udostępniana.

Implementacja

Aby można było używać interfejsu Connectivity Diagnostic API, aplikacja musi uzyskać ConnectivityDiagnosticsManager z platformy. Tej instancji należy używać do rejestracji i wyrejestrować ConnectivityDiagnosticsCallback implementacji. Metody wywołania zwrotnego, które nie zostały zastąpione, nie są zastępowane.

Poniżej znajduje się przykład ConnectivityDiagnosticsCallback implementacja:

public class ExampleCallback extends ConnectivityDiagnosticsCallback {
    @Override
    public void onConnectivityReportAvailable(@NonNull ConnectivityReport report) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }

    @Override
    public void onDataStallSuspected(@NonNull DataStallReport report) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }

    @Override
    public void onNetworkConnectivityReported(
               @NonNull Network network, boolean hasConnectivity) {
        ... 
        // Log data, take action based on report result, etc
        ... 
    }
}

Aby zarejestrować wywołania zwrotne i otrzymywać powiadomienia, zadzwoń pod numer registerConnectivityDiagnosticsCallback Aby wyrejestrować wywołania zwrotne i przestać otrzymywać powiadomienia, zadzwoń pod numer unregisterConnectivityDiagnosticsCallback

Poniżej znajdziesz przykład rejestracji i wyrejestrowania ConnectivityDiagnosticsCallback:

NetworkRequest request =
        new NetworkRequest.Builder()
                .addTransportType(TRANSPORT_CELLULAR)
                .build();
// Use an Executor that is appropriate for your use case
Executor executor = Executors.newSingleThreadExecutor();

ConnectivityDiagnosticsManager cdm =
        context.getSystemService(ConnectivityDiagnosticsManager.class);

ExampleCallback callback = new ExampleCallback();
cdm.registerConnectivityDiagnosticsCallback(
        request, executor, callback);

... 
// Collect connectivity information on networks that match with request
... 

cdm.unregisterConnectivityDiagnosticsCallback(callback);

Weryfikacja

Interfejs Connectivity Diagnostic API jest testowany przez ConnectivityDiagnosticsManagerTest