La API de Connectivity Diagnostics permite a las apps que poseen o administran redes, como como apps de operadores, VPN y apps de sugerencias de Wi-Fi, para recibir diagnósticos información de conectividad de red del framework. Estas apps pueden registrar devoluciones de llamada y recibir notificaciones con información de conectividad para las redes que poseen o administran. Las apps no recibirán notificaciones de redes que no sean de su propiedad ni estén administradas por ellas.
Los siguientes son ejemplos de apps que administran o poseen redes:
- Apps del operador: Administra las redes móviles para las que su
subId
tiene privilegios del operador. - Apps de sugerencias de Wi-Fi: Son redes Wi-Fi propias que sugieren al sistema.
- Apps de VPN: Administra todas las redes que usa su VPN, pero solo cuando. son la VPN activa
Las devoluciones de llamada se invocan en los siguientes casos:
Validación de red: El sistema terminó de evaluar una red específica. El
ConnectivityReport
proporciona información sobre el estado actual de la red y la los resultados de las pruebas o los procedimientos que se llevaron a cabo como parte de la validación.public class ConnectivityReport { Network network; long reportTimestamp; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle additionalInfo; }
Se sospecha que se produjo una detención de datos: Se sospecha que se produjo una detención de datos, una condición en la que los paquetes de IP no fluyen correctamente a través de la red. El
DataStallReport
proporciona información sobre posibles bloqueos de datos.public class DataStallReport { Network network; long reportTimestamp; int detectionMethod; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle stallDetails; }
Se informó conectividad: Una app informó conectividad a través de
ConnectivityManager#reportNetworkConnectivity
con el sistema. La red y la conectividad informada (ya sea que la app cree que la red proporciona o no conectividad) se comparte.
Implementación
Para usar la API de Connectivity Diagnostics, una app debe obtener una instancia de ConnectivityDiagnosticsManager
de la plataforma. Esta instancia debe usarse para registrar y
cancelar registro
ConnectivityDiagnosticsCallback
de Google Cloud. Los métodos de devolución de llamada que no se anulan son no-ops.
A continuación, se muestra un ejemplo de una implementación de 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
...
}
}
Para registrar devoluciones de llamada y recibir notificaciones, llama a registerConnectivityDiagnosticsCallback
.
Para cancelar el registro de devoluciones de llamada y dejar de recibir notificaciones, llama a
unregisterConnectivityDiagnosticsCallback
A continuación, se incluye un ejemplo de cómo registrarse y cancelar el registro
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);
Validación
La API de diagnóstico de conectividad se somete a pruebas de CTS
ConnectivityDiagnosticsManagerTest