API Connectivity Diagnostics

A API Connectivity Diagnostics permite que apps que têm ou gerenciam redes, como apps de operadora, VPN e sugestão de Wi-Fi, recebam informações de diagnóstico de conectividade de rede do framework. Esses apps podem registrar callbacks e receber notificações com informações de conectividade das redes que possuem ou gerenciam. Os apps não recebem notificações de redes que não são de propriedade ou gerenciadas por eles.

Confira alguns exemplos de apps que gerenciam ou são proprietários de redes:

  • Apps de operadora:gerencie redes celulares em que o subId tem privilégios de operadora.
  • Apps de sugestão de Wi-Fi:redes Wi-Fi próprias que eles sugerem ao sistema.
  • Apps de VPN:gerenciam todas as redes usadas pela VPN, mas apenas quando ela está ativa.

Os callbacks são invocados nos seguintes casos:

  • Validação de rede:o sistema concluiu a avaliação de uma rede específica. A classe ConnectivityReport fornece informações sobre o estado atual da rede e os resultados de testes ou procedimentos realizados como parte da validação.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Suspeita de interrupção de dados:suspeita de interrupção de dados, uma condição em que os pacotes IP não fluem corretamente pela rede. A classe DataStallReport fornece informações sobre possíveis interrupções de dados.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Conectividade informada:um app informou a conectividade ao sistema usando ConnectivityManager#reportNetworkConnectivity. A rede e a conectividade informada (se o app acredita que a rede oferece ou não conectividade) são compartilhadas.

Implementação

Para usar a API Connectivity Diagnostics, um app precisa receber uma instância ConnectivityDiagnosticsManager da plataforma. Essa instância deve ser usada para registrar e cancelar o registro de implementações do ConnectivityDiagnosticsCallback. Os métodos de callback que não são substituídos são operações nulas.

Confira um exemplo de implementação 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 callbacks e receber notificações, chame registerConnectivityDiagnosticsCallback. Para cancelar o registro de callbacks e parar de receber notificações, chame unregisterConnectivityDiagnosticsCallback.

Confira abaixo um exemplo de registro e cancelamento do registro de 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);

Validação

A API Connectivity Diagnostics é testada pelo CTS por ConnectivityDiagnosticsManagerTest.