Memantau status konektivitas dan pengukuran koneksi

Anda dapat menggunakan ConnectivityManager untuk memeriksa apakah Anda tersambung ke internet, dan jika ya, untuk menentukan jenis koneksi apa yang sedang digunakan.

Menentukan apakah Anda memiliki koneksi internet atau tidak

Anda tidak dapat menjalankan update berdasarkan resource internet jika tidak tersambung ke internet. Cara yang direkomendasikan untuk menjadwalkan tugas yang memerlukan konektivitas internet adalah menggunakan WorkManager. Untuk mengetahui informasi selengkapnya, buka Menjadwalkan tugas dengan WorkManager. Anda juga dapat menggunakan metode yang ditunjukkan dalam cuplikan berikut untuk mengkueri jaringan aktif secara interaktif guna menentukan apakah jaringan memiliki konektivitas internet.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();
    

Catatan: getActiveNetworkInfo() tidak digunakan lagi di Android 10. Sebagai gantinya, gunakan NetworkCallbacks untuk aplikasi yang menargetkan Android 10 (API level 29) dan yang lebih tinggi.

Menentukan jenis koneksi internet

Anda juga dapat menentukan jenis koneksi internet yang saat ini tersedia.

Konektivitas perangkat dapat disediakan oleh data seluler, WiMAX, Wi-Fi, dan koneksi Ethernet. Dengan mengkueri jenis jaringan yang aktif, seperti yang ditunjukkan dalam contoh kode berikut, Anda dapat mengubah perilaku aplikasi berdasarkan bandwidth yang tersedia.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val isMetered = cm.isActiveNetworkMetered()
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isMetered = cm.isActiveNetworkMetered();
    

Catatan: Jika aplikasi Anda perlu mendukung Android 4.0 (API level 15) dan yang lebih rendah, gunakan ConnectivityManagerCompat.isActiveNetworkMetered, bukan ConnectivityManager.isActiveNetworkMetered().

Biaya data seluler cenderung jauh lebih mahal daripada biaya Wi-Fi dan Ethernet. Saat menggunakan koneksi berbayar, Anda harus mencoba mengurangi penggunaan data aplikasi, atau bahkan menunda sampai Anda berada pada koneksi tidak berbayar.