API диагностики подключений позволяет приложениям, которые владеют сетями или управляют ими, например приложениям оператора связи, приложениям VPN и приложениям с предложениями Wi-Fi, получать диагностическую информацию о подключении к сети из платформы. Эти приложения могут регистрировать обратные вызовы и получать уведомления с информацией о подключении для сетей, которыми они владеют или управляют. Приложения не будут получать уведомления для сетей, которые не принадлежат и не управляются приложением.
Ниже приведены примеры приложений, которые управляют сетями или владеют ими:
- Приложения оператора связи: управляйте сотовыми сетями, для которых их
subId
имеет права оператора связи. - Приложения с предложениями Wi-Fi: собственные сети Wi-Fi, которые они предлагают системе.
- VPN-приложения: управляйте всеми сетями, которые использует их VPN, но только если они являются активными VPN.
Обратные вызовы вызываются в следующих случаях:
Проверка сети: система завершила оценку конкретной сети. Класс
ConnectivityReport
предоставляет информацию о текущем состоянии сети и результатах любых тестов или процедур, выполненных в рамках проверки.public class ConnectivityReport { Network network; long reportTimestamp; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle additionalInfo; }
Подозрение на задержку данных: подозрение на задержку данных, состояние, при котором IP-пакеты не проходят через сеть должным образом. Класс
DataStallReport
предоставляет информацию о предполагаемых задержках данных.public class DataStallReport { Network network; long reportTimestamp; int detectionMethod; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle stallDetails; }
Сообщено о подключении: приложение сообщило о подключении к системе через
ConnectivityManager#reportNetworkConnectivity
. Сеть и сообщаемые подключения (независимо от того, считает ли приложение, что сеть обеспечивает или не обеспечивает подключение) являются общими.
Выполнение
Чтобы использовать API диагностики подключений, приложение должно получить экземпляр ConnectivityDiagnosticsManager
с платформы. Этот экземпляр следует использовать для регистрации и отмены регистрации реализаций ConnectivityDiagnosticsCallback
. Методы обратного вызова, которые не переопределены, являются пустыми.
Ниже приведен пример реализации 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
...
}
}
Чтобы зарегистрировать обратные вызовы и получать уведомления, вызовите registerConnectivityDiagnosticsCallback
. Чтобы отменить регистрацию обратных вызовов и прекратить получение уведомлений, вызовите unregisterConnectivityDiagnosticsCallback
.
Ниже приведен пример регистрации и отмены регистрации 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);
Валидация
API диагностики подключений протестирован CTS с помощью ConnectivityDiagnosticsManagerTest
.