API de diagnóstico de conectividad

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 el redes que ellos poseen o administran. Las apps no recibirán notificaciones de redes que no son propiedad de la app ni están administradas por esta.

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 de operador para
  • Apps de sugerencias de Wi-Fi: Establece las redes Wi-Fi que sugieren. 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;
    }
    
  • Posible bloqueo de datos: Un bloqueo de datos, una condición en la que los paquetes de IP. no fluyan 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;
    }
    
  • Conectividad informada: una app informó la conectividad a través de ConnectivityManager#reportNetworkConnectivity al 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 un ConnectivityDiagnosticsManager instancia desde 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.

Aquí tienes un ejemplo de un ConnectivityDiagnosticsCallback implementación:

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