API Diagnostik Konektivitas

API Diagnostik Konektivitas memungkinkan aplikasi yang memiliki atau mengelola jaringan, seperti aplikasi operator, aplikasi VPN, dan aplikasi saran Wi-Fi, menerima informasi konektivitas jaringan diagnostik dari kerangka kerja. Aplikasi ini dapat mendaftarkan panggilan balik dan menerima pemberitahuan dengan informasi konektivitas untuk jaringan yang mereka miliki atau kelola. Aplikasi tidak akan menerima notifikasi untuk jaringan yang tidak dimiliki atau dikelola oleh aplikasi.

Berikut adalah contoh aplikasi yang mengelola atau memiliki jaringan:

  • Aplikasi operator: Mengelola jaringan seluler yang subId memiliki hak istimewa operator
  • Aplikasi saran Wi-Fi: Memiliki jaringan Wi-Fi yang disarankan ke sistem
  • Aplikasi VPN: Kelola semua jaringan yang digunakan VPN-nya, namun hanya jika jaringan tersebut adalah VPN yang aktif

Callback dipanggil dalam kasus berikut:

  • Validasi jaringan: Sistem selesai mengevaluasi jaringan tertentu. Kelas ConnectivityReport memberikan informasi tentang keadaan jaringan saat ini dan hasil dari setiap pengujian atau prosedur yang dilakukan sebagai bagian dari validasi.

    public class ConnectivityReport {
        Network network;
        long reportTimestamp;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle additionalInfo;
    }
    
  • Dugaan terhentinya data: Dicurigai terhentinya data, suatu kondisi di mana paket IP tidak mengalir dengan benar melalui jaringan. Kelas DataStallReport memberikan informasi tentang dugaan terhentinya data.

    public class DataStallReport {
        Network network;
        long reportTimestamp;
        int detectionMethod;
        LinkProperties linkProperties;
        NetworkCapabilities networkCapabilities;
        PersistableBundle stallDetails;
    }
    
  • Konektivitas dilaporkan: Aplikasi telah melaporkan konektivitas melalui ConnectivityManager#reportNetworkConnectivity ke sistem. Jaringan dan konektivitas yang dilaporkan (apakah aplikasi yakin jaringan menyediakan atau tidak menyediakan konektivitas) dibagikan.

Penerapan

Untuk menggunakan Connectivity Diagnostics API, aplikasi harus mendapatkan instance ConnectivityDiagnosticsManager dari platform. Contoh ini harus digunakan untuk mendaftarkan dan membatalkan pendaftaran penerapan ConnectivityDiagnosticsCallback . Metode panggilan balik yang tidak diganti adalah tanpa operasi.

Di bawah ini adalah contoh penerapan 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
        ... 
    }
}

Untuk mendaftarkan callback dan menerima notifikasi, panggil registerConnectivityDiagnosticsCallback . Untuk membatalkan registrasi callback dan berhenti menerima notifikasi, hubungi unregisterConnectivityDiagnosticsCallback .

Di bawah ini adalah contoh untuk mendaftar dan membatalkan pendaftaran 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);

Validasi

Connectivity Diagnostics API adalah CTS yang diuji oleh ConnectivityDiagnosticsManagerTest .