Interfejs Connectivity Diagnostics API umożliwia aplikacjom, które są właścicielami sieci lub nimi zarządzają (np. aplikacjom operatorów, aplikacjom VPN i aplikacjom z sugestiami sieci Wi-Fi), otrzymywanie z platformy informacji diagnostycznych o połączeniu z siecią. Te aplikacje mogą rejestrować wywołania zwrotne i otrzymywać powiadomienia z informacjami o połączeniu z sieciami, których są właścicielami lub którymi zarządzają. Aplikacje nie będą otrzymywać powiadomień o sieciach, których nie są właścicielami ani którymi nie zarządzają.
Oto przykłady aplikacji, które zarządzają sieciami lub są ich właścicielami:
- Aplikacje operatorów: zarządzają sieciami komórkowymi, w których mają uprawnienia operatora w ramach
subId. - Aplikacje z sugestiami sieci Wi-Fi: są właścicielami sieci Wi-Fi, które sugerują systemowi.
- Aplikacje VPN: zarządzają wszystkimi sieciami, z których korzysta ich sieć VPN, ale tylko wtedy, gdy są aktywną siecią VPN.
Wywołania zwrotne są wywoływane w tych przypadkach:
Weryfikacja sieci: system zakończył ocenę konkretnej sieci. Klasa
ConnectivityReportzawiera informacje o bieżącym stanie sieci oraz wyniki testów i procedur przeprowadzonych w ramach weryfikacji.public class ConnectivityReport { Network network; long reportTimestamp; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle additionalInfo; }Podejrzenie zablokowania danych: podejrzewane jest zablokowanie danych, czyli sytuacja, w której pakiety IP nie przepływają prawidłowo przez sieć. Klasa
DataStallReportzawiera informacje o podejrzewanych zablokowaniach danych.public class DataStallReport { Network network; long reportTimestamp; int detectionMethod; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle stallDetails; }Zgłoszenie połączenia: aplikacja zgłosiła systemowi połączenie za pomocą
ConnectivityManager#reportNetworkConnectivity. Udostępniana jest sieć i zgłoszone połączenie (czy aplikacja uważa, że sieć zapewnia połączenie).
Implementacja
Aby korzystać z interfejsu Connectivity Diagnostics API, aplikacja musi uzyskać
ConnectivityDiagnosticsManager
instancję z platformy. Ta instancja powinna służyć do rejestrowania i
wyrejestrowywania
ConnectivityDiagnosticsCallback
implementacji. Metody wywołania zwrotnego, które nie są zastępowane, nie wykonują żadnych działań.
Poniżej znajdziesz przykład implementacji
ConnectivityDiagnosticsCallback:
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, wywołaj
registerConnectivityDiagnosticsCallback.
Aby wyrejestrować wywołania zwrotne i przestać otrzymywać powiadomienia, wywołaj
unregisterConnectivityDiagnosticsCallback.
Poniżej znajdziesz przykład rejestrowania i wyrejestrowywania 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 Diagnostics API jest testowany przez CTS za pomocą
ConnectivityDiagnosticsManagerTest.