La API de diagnóstico de conectividad permite que las aplicaciones que poseen o administran redes, como aplicaciones de operadores, aplicaciones de VPN y aplicaciones de sugerencias de Wi-Fi, reciban información de conectividad de red de diagnóstico del marco. Estas aplicaciones pueden registrar devoluciones de llamadas y recibir notificaciones con información de conectividad para las redes que poseen o administran. Las aplicaciones no recibirán notificaciones de redes que no sean propiedad de la aplicación ni estén administradas por ella.
Los siguientes son ejemplos de aplicaciones que administran o poseen redes:
- Aplicaciones de operador: administre redes celulares para las cuales su
subId
tiene privilegios de operador para - Apps de sugerencia wifi: Redes wifi propias que sugieren al sistema
- Aplicaciones VPN: administre 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. La clase
ConnectivityReport
proporciona información sobre el estado actual de la red y los resultados de cualquier prueba o procedimiento realizado como parte de la validación.public class ConnectivityReport { Network network; long reportTimestamp; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle additionalInfo; }
Sospecha de atasco de datos: se sospecha un atasco de datos, una condición en la que los paquetes IP no fluyen correctamente a través de la red. La clase
DataStallReport
proporciona información sobre posibles bloqueos de datos.public class DataStallReport { Network network; long reportTimestamp; int detectionMethod; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle stallDetails; }
Conectividad informada: una aplicación ha informado de conectividad a través de
ConnectivityManager#reportNetworkConnectivity
al sistema. La red y la conectividad informada (ya sea que la aplicación crea que la red brinda o no conectividad) se comparte.
Implementación
Para usar la API de Connectivity Diagnostics, una aplicación debe obtener una instancia ConnectivityDiagnosticsManager
de la plataforma. Esta instancia debe usarse para registrar y anular el registro de implementaciones ConnectivityDiagnosticsCallback
. Los métodos de devolución de llamada que no se anulan no son operativos.
A continuación se muestra un ejemplo de una implementación 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 llamadas y recibir notificaciones, llama registerConnectivityDiagnosticsCallback
. Para anular el registro de las devoluciones de llamada y dejar de recibir notificaciones, llama a unregisterConnectivityDiagnosticsCallback
.
A continuación se muestra un ejemplo para registrar 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
ConnectivityDiagnosticsManagerTest
prueba CTS para la API de Connectivity Diagnostics.