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