API Connectivity Diagnostica

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

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

  • App dell'operatore: gestisci le reti mobili per le quali i loro subId dispone dei privilegi di operatore per
  • App di suggerimenti Wi-Fi:possiedono le reti Wi-Fi che suggeriscono alla sistema
  • App VPN:gestisci tutte le reti utilizzate dalla sua VPN, ma solo quando la VPN attiva

I callback vengono richiamati nei seguenti casi:

  • Convalida della rete: il sistema ha terminato la valutazione di una rete specifica. La ConnectivityReport fornisce informazioni sullo stato attuale della rete e risultati di eventuali test o procedure eseguiti nell'ambito della convalida.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Sospetto stallo dei dati:uno stallo dei dati, una condizione in cui i pacchetti IP si sospetta che non passino correttamente attraverso la rete. La DataStallReport fornisce informazioni su presunti blocchi di dati.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Connettività segnalata: un'app ha segnalato connettività tramite ConnectivityManager#reportNetworkConnectivity: al sistema. La rete e la connettività segnalata (se l'app ritiene che la rete fornisca o non fornisce connettività) viene condivisa.

Implementazione

Per utilizzare l'API Connectivity Diagnostica, un'app deve ottenere un ConnectivityDiagnosticsManager di un'istanza dalla piattaforma. Questa istanza dovrebbe essere utilizzata per registrare annulla registrazione ConnectivityDiagnosticsCallback implementazioni. I metodi di callback senza override sono automatici.

Di seguito è riportato un esempio di ConnectivityDiagnosticsCallback implementazione:

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 i callback e ricevere le notifiche, chiama registerConnectivityDiagnosticsCallback Per annullare la registrazione dei callback e interrompere la ricezione delle notifiche, chiama unregisterConnectivityDiagnosticsCallback

Di seguito è riportato un esempio di registrazione e 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 Connectivity Diagnostica è stata testata da CTS ConnectivityDiagnosticsManagerTest