Konnektivitätsdiagnose-API

Die Konnektivitätsdiagnose-API ermöglicht Apps, die Netzwerke besitzen oder verwalten, wie z. Diese Apps können Rückrufe registrieren und Benachrichtigungen mit Konnektivitätsinformationen für die Netzwerke empfangen, die sie besitzen oder verwalten. Apps erhalten keine Benachrichtigungen für Netzwerke, die nicht der App gehören oder von ihr verwaltet werden.

Im Folgenden finden Sie Beispiele für Apps, die Netzwerke verwalten oder besitzen:

  • Carrier - Anwendungen: Verwalten Mobilfunknetze , für die ihre subId haben Träger Privilegien für
  • Wi-Fi - Vorschlag Apps: Eigene Wi-Fi - Netzwerke , dass sie an das System vorschlagen
  • VPN - Apps: Verwalten Sie alle Netzwerke , dass ihre VPN - Anwendungen, aber nur , wenn sie die aktiven VPN

Rückrufe werden in den folgenden Fällen aufgerufen:

  • Netzwerk - Validierung: Das System beendet ein bestimmtes Netzwerk zu bewerten. Die ConnectivityReport - Klasse stellt Informationen über den aktuellen Zustand des Netzwerks und die Ergebnisse von Tests oder als Teil der Validierung durchgeführten Aktionen .

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Datenstand vermutet: Ein Datenstand, ein Zustand , in dem IP - Pakete werden nicht richtig durch das Netz fließt, vermutet wird. Die DataStallReport - Klasse stellt Informationen über mutmaßliche Datenstände.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Connectivity berichtet: Eine App wurde berichtet Konnektivität über ConnectivityManager#reportNetworkConnectivity an das System. Das Netzwerk und die gemeldete Konnektivität (unabhängig davon, ob die App glaubt, dass das Netzwerk Konnektivität bietet oder nicht) wird geteilt.

Implementierung

Um die Verbindungsdiagnose - API zu verwenden, muss eine Anwendung eine erhält ConnectivityDiagnosticsManager Instanz von der Plattform. Diese Instanz soll verwendet werden , um zu registrieren und austragen ConnectivityDiagnosticsCallback Implementierungen. Callback-Methoden, die nicht überschrieben werden, sind No-Ops.

Im Folgenden finden Sie ein Beispiel für eine ConnectivityDiagnosticsCallback Umsetzung:

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
        ... 
    }
}

Um sich zu registrieren Rückrufe und erhalten Benachrichtigungen, rufen registerConnectivityDiagnosticsCallback . Um austragen Rückrufe und Stopp - Benachrichtigungen empfangen, rufen unregisterConnectivityDiagnosticsCallback .

Unten ist ein Beispiel für die Registrierung und Deregistrierung 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);

Validierung

Der Connectivity - Diagnose - API ist CTS durch getestet ConnectivityDiagnosticsManagerTest .