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 dell'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