API di diagnostica della connettività

L'API Connectivity Diagnostics consente alle app che possiedono o gestiscono reti, ad esempio app dell'operatore, app VPN e app di suggerimenti Wi-Fi, di ricevere informazioni diagnostiche sulla connettività di rete dal framework. Queste app possono registrare callback e ricevere notifiche con informazioni sulla connettività per le reti che possiedono o gestiscono. Le app non riceveranno notifiche per le reti che non sono di proprietà o gestite dall'app.

Di seguito sono riportati esempi di app che gestiscono o possiedono reti:

  • Applicazioni Carrier: Gestire le reti cellulari per i quali la loro subId ha privilegi di supporto per
  • Apps suggerimento Wi-Fi: proprie reti Wi-Fi che suggeriscono al sistema
  • VPN apps: Gestire tutte le reti che i loro usi VPN, ma solo quando sono il VPN attivi

I callback vengono invocati nei seguenti casi:

  • Convalida di rete: Il sistema finito valutazione di una rete specifica. Il ConnectivityReport classe fornisce informazioni sullo stato attuale della rete e dei risultati di prove o procedure eseguite come parte della convalida.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • I dati di stallo sospettato: Una stalla di dati, una condizione in cui i pacchetti IP non sono adeguatamente che scorre attraverso la rete, si sospetta. Il DataStallReport classe fornisce informazioni su presunti bancarelle di dati.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Connettività ha riferito: Un'applicazione ha riportato la connettività attraverso ConnectivityManager#reportNetworkConnectivity al sistema. La rete e la connettività segnalata (indipendentemente dal fatto che l'app ritenga che la rete fornisca o meno connettività) sono condivise.

Implementazione

Per utilizzare l'API Diagnostica della connettività, un'applicazione deve ottenere un ConnectivityDiagnosticsManager esempio dalla piattaforma. Questa istanza deve essere utilizzato per registrare e annullare la registrazione ConnectivityDiagnosticsCallback implementazioni. I metodi di callback che non vengono sovrascritti sono no-ops.

Qui di seguito è un esempio di un ConnectivityDiagnosticsCallback applicazione:

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
        ... 
    }
}

Per registrare callback e ricevere notifiche, chiamare registerConnectivityDiagnosticsCallback . Per callback annullare la registrazione e non ricevere più notifiche, chiamare unregisterConnectivityDiagnosticsCallback .

Di seguito è riportato un esempio per la registrazione e l'annullamento della registrazione 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);

Convalida

L'API Diagnostica della connettività è CTS testato da ConnectivityDiagnosticsManagerTest .