API Connectivity Diagnostics

A API Connectivity Diagnostics permite apps que possuem ou gerenciam redes, como como apps de operadora, VPN e sugestão de Wi-Fi para receber diagnósticos de conectividade de rede do framework. Esses apps podem registrar retornos de chamada e receber notificações com informações de conectividade para a redes que eles possuem ou gerenciam. Os apps não receberão notificações de redes que não pertencem nem são gerenciados pelo app.

Confira a seguir exemplos de apps que gerenciam ou têm redes:

  • Apps da operadora:gerencie redes celulares em que o subId tem privilégios de operadora para
  • Apps de sugestões de Wi-Fi:possui as redes Wi-Fi sugeridas ao usuário. sistema
  • Apps de VPN:gerencia todas as redes usadas pela VPN, mas apenas quando eles são a VPN ativa

Os callbacks são invocados nos seguintes casos:

  • Validação de rede:o sistema terminou de avaliar uma rede específica. A ConnectivityReport fornece informações sobre o estado atual da rede e as resultados de quaisquer testes ou procedimentos realizados como parte da validação.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Suspeita de indisponibilidade de dados: uma interrupção de dados, uma condição em que os pacotes IP não estão fluindo corretamente pela rede, é suspeito. A DataStallReport fornece informações sobre suspeitas de comprometimento dos dados.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Conectividade informada:um app relatou conectividade por meio de ConnectivityManager#reportNetworkConnectivity ao sistema. A rede e a conectividade informada (se o app acredita que a rede fornece ou não conectividade) é compartilhada.

Implementação

Para usar a API Connectivity Diagnostics, o app precisa ter um ConnectivityDiagnosticsManager da plataforma. Essa instância deve ser usada para registrar e cancelar inscrição ConnectivityDiagnosticsCallback e implementações. Os métodos de callback que não são substituídos são um ambiente autônomo.

Abaixo está um exemplo ConnectivityDiagnosticsCallback implementação:

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 como registrar e cancelar o 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);

Validação

A API Connectivity Diagnostics é testada por CTS pela ConnectivityDiagnosticsManagerTest