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ć wywołania zwrotne i otrzymywać powiadomienia z informacjami o połączeniach sieci, które są ich własnością lub którymi zarządzają. 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 do sugerowania sieci Wi-Fi: własne sieci Wi-Fi, które sugerują systemowi;
- Aplikacje VPN: zarządzają wszystkimi sieciami, których używa VPN, ale tylko wtedy, gdy jest to aktywna sieć VPN.
Wywołania zwrotne są wywoływane w tych sytuacjach:
Weryfikacja sieci: system ukończył sprawdzanie określonej 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ć. Klasa
DataStallReport
zawiera informacje o podejrzanych zastojach 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. Ten obiekt powinien służyć do rejestrowania i odrejestrowania implementacji ConnectivityDiagnosticsCallback
. Metody wywołania zwrotnego, które nie są zastąpione, nie są wykonywane.
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, zadzwoń pod numer registerConnectivityDiagnosticsCallback
.
Aby anulować rejestrację wywołań zwrotnych i zatrzymać otrzymywanie powiadomień, wywołaj funkcję unregisterConnectivityDiagnosticsCallback
.
Oto 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