L'API Connectivity Diagnostics permet aux applications qui possèdent ou gèrent des réseaux, tels que comme applis d'opérateur, applis de VPN et applis de suggestion Wi-Fi, pour recevoir des diagnostics des informations sur la connectivité réseau à partir du framework. Ces applications peuvent enregistrer des rappels et de recevoir des notifications contenant les informations de connectivité des réseaux qu'ils possèdent ou gèrent. Les applis ne recevront pas de notifications pour les réseaux qui ne sont ni détenus, ni gérés par l'application.
Voici des exemples d'applications qui gèrent ou possèdent des réseaux:
- Applications d'opérateurs:gérez les réseaux mobiles pour lesquels un appareil
subId
dispose de privilèges d'opérateur pour - Applications de suggestion de réseaux Wi-Fi:elles possèdent les réseaux Wi-Fi qu'elles suggèrent au client. système
- Applications VPN:gérez tous les réseaux utilisés par le VPN, mais uniquement lorsque il s'agit du VPN actif
Les rappels sont appelés dans les cas suivants:
Validation du réseau:le système a terminé l'évaluation d'un réseau spécifique. La
ConnectivityReport
fournit des informations sur l'état actuel du réseau et sur les résultats de tout test ou toute procédure effectué dans le cadre de la validation.public class ConnectivityReport { Network network; long reportTimestamp; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle additionalInfo; }
Suspicion de blocage des données:blocage des données (état dans lequel des paquets IP ne circulent pas correctement sur le réseau. La
DataStallReport
fournit des informations sur les suspicions de blocage de données.public class DataStallReport { Network network; long reportTimestamp; int detectionMethod; LinkProperties linkProperties; NetworkCapabilities networkCapabilities; PersistableBundle stallDetails; }
Connectivité signalée:une application a signalé une connectivité via
ConnectivityManager#reportNetworkConnectivity
au système. Le réseau et la connectivité signalée (si l'application pense que le réseau fournit ou ne fournit pas une connectivité) est partagée.
Implémentation
Pour utiliser l'API Connectivity Diagnostics, une application doit obtenir un
ConnectivityDiagnosticsManager
de la plate-forme. Cette instance doit être utilisée pour enregistrer
se désinscrire
ConnectivityDiagnosticsCallback
mises en œuvre. Les méthodes de rappel qui ne sont pas remplacées sont no-ops.
Vous trouverez ci-dessous un exemple
ConnectivityDiagnosticsCallback
implémentation:
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
...
}
}
Pour enregistrer des rappels et recevoir des notifications, appelez
registerConnectivityDiagnosticsCallback
Pour annuler l'enregistrement de rappels et ne plus recevoir de notifications, appelez
unregisterConnectivityDiagnosticsCallback
Vous trouverez ci-dessous un exemple d'enregistrement et d'annulation de l'enregistrement.
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);
Validation
L'API Connectivity Diagnostics est testée par
ConnectivityDiagnosticsManagerTest