API Connectivity Diagnostics

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