A API Connectivity Diagnostics permite que aplicativos que possuem ou gerenciam redes, como aplicativos de operadora, aplicativos VPN e aplicativos de sugestão de Wi-Fi, recebam informações de diagnóstico de conectividade de rede da estrutura. Esses aplicativos podem registrar retornos de chamada e receber notificações com informações de conectividade das redes que possuem ou gerenciam. Os aplicativos não receberão notificações de redes que não pertencem ou não são gerenciadas pelo aplicativo.
A seguir estão exemplos de aplicativos que gerenciam ou possuem redes:
- Aplicativos de operadora: gerencie redes celulares para as quais seu
subId
tenha privilégios de operadora para - Aplicativos de sugestão de Wi-Fi: redes Wi-Fi próprias que sugerem ao sistema
- Aplicativos VPN: gerencie todas as redes que sua VPN usa, mas somente quando for a VPN ativa
Os retornos de chamada 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 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 bloqueio de dados: há suspeita de bloqueio de dados, uma condição na qual os pacotes IP não estão fluindo adequadamente pela rede. A classe
DataStallReport
fornece informações sobre suspeitas de paralisação de dados.public class DataStallReport { Network network; long reportTimestamp; int detectionMethod; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle stallDetails; }
Conectividade relatada: um aplicativo relatou conectividade por meio de
ConnectivityManager#reportNetworkConnectivity
para o sistema. A rede e a conectividade relatada (se o aplicativo acredita que a rede fornece ou não conectividade) são compartilhadas.
Implementação
Para usar a API Connectivity Diagnostics, um aplicativo deve obter uma instância ConnectivityDiagnosticsManager
da plataforma. Esta instância deve ser usada para registrar e cancelar o registro de implementações ConnectivityDiagnosticsCallback
. Os métodos de retorno de chamada que não são substituídos são autônomos.
Abaixo está 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 retornos de chamada e receber notificações, chame registerConnectivityDiagnosticsCallback
. Para cancelar o registro de retornos de chamada e parar de receber notificações, chame unregisterConnectivityDiagnosticsCallback
.
Abaixo está um exemplo para 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 CTS por ConnectivityDiagnosticsManagerTest
.