NetworkCallback: apa itu, penerapan dan penanganan jaringan di Android

Penulis: IT Sectr Diterbitkan: 2026-03-10 Waktu membaca: 9 mnt

NetworkCallback — kelas abstrak di Android SDK untuk memantau perubahan status jaringan melalui ConnectivityManager. Menurut Android Developers Documentation (2025), penggunaan NetworkCallback memungkinkan aplikasi untuk merespons tepat waktu terhadap koneksi, pemutusan, atau perubahan karakteristik koneksi. ConnectivityManager.NetworkCallback memberikan informasi detail tentang tipe jaringan, portal captive, dan kehilangan internet tanpa polling terus-menerus ke layanan sistem.

Hal Utama

  • NetworkCallback — kelas abstrak bawaan Android SDK untuk melacak status jaringan melalui ConnectivityManager.
  • Metode onAvailable dipanggil saat perangkat terhubung ke jaringan, mengirimkan objek Network dengan detail koneksi.
  • Metode onLost dipicu saat kehilangan koneksi jaringan, memungkinkan aplikasi menghentikan permintaan jaringan.
  • Metode onCapabilitiesChanged memberitahu tentang perubahan kemampuan jaringan — munculnya internet, portal captive, atau koneksi berbayar.
  • Pendaftaran dilakukan melalui registerNetworkCallback, pembatalan — melalui unregisterNetworkCallback dalam siklus hidup aplikasi.

Apa itu NetworkCallback?

NetworkCallback — adalah kelas abstrak dari paket android.net, yang merupakan bagian dari Android SDK. Ini dirancang untuk menerima pemberitahuan tentang perubahan status koneksi jaringan melalui layanan sistem ConnectivityManager.

Sebelum munculnya NetworkCallback, pengembang menggunakan penerima siaran BroadcastReceiver untuk melacak jaringan. Pendekatan ini memerlukan pendaftaran konstan di manifes, bekerja dengan penundaan, dan tidak memberikan informasi detail tentang karakteristik koneksi. Android 5.0 (API 21) memperkenalkan NetworkCallback sebagai alternatif yang lebih fleksibel dan efisien.

Callback bekerja secara asinkron: aplikasi berlangganan ke peristiwa melalui ConnectivityManager, dan sistem memanggil metode callback saat status jaringan berubah. Ini menghilangkan kebutuhan polling periodik status jaringan, menghemat sumber daya baterai dan prosesor.

Bagaimana callback bekerja di Android

ConnectivityManager mengelola semua antarmuka jaringan perangkat — Wi-Fi, data seluler, Ethernet, VPN. Saat salah satu antarmuka ini berubah, sistem membuat objek Network dan mengirimkannya ke metode yang sesuai dari callback yang terdaftar. Setiap Network memiliki pengenal unik yang berubah saat koneksi ulang.

Callback tidak terikat pada jenis jaringan tertentu — ia dapat melacak semua antarmuka yang tersedia secara bersamaan. Untuk memfilter jenis koneksi, digunakan kelas NetworkRequest, di mana protokol transport yang diperlukan (Wi-Fi, data seluler, Ethernet) dan kemampuan jaringan ditentukan.

Cara mendaftarkan NetworkCallback di aplikasi

Pendaftaran NetworkCallback dilakukan melalui metode ConnectivityManager.registerNetworkCallback. Parameter pertama adalah NetworkRequest.Builder yang menjelaskan persyaratan jaringan, parameter kedua — instance callback. Untuk beroperasi, diperlukan izin ACCESS_NETWORK_STATE di manifes.

kotlin
class NetworkMonitor(private val context: Context) {

    private val connectivityManager =
        context.getSystemService(Context.CONNECTIVITY_SERVICE)
            as ConnectivityManager

    private val callback =
        object : ConnectivityManager.NetworkCallback() {

        override fun onAvailable(network: Network) {
            Log.d("Network", "Tersedia: ${network}")
        }

        override fun onLost(network: Network) {
            Log.d("Network", "Hilang: ${network}")
        }
    }

    fun register() {
        connectivityManager.registerNetworkCallback(
            NetworkRequest.Builder().build(), callback
        )
    }

    fun unregister() {
        connectivityManager.unregisterNetworkCallback(callback)
    }
}

Pendaftaran di Activity dan Fragment

Disarankan untuk mendaftarkan NetworkCallback saat aplikasi berada di latar depan dan membatalkannya saat beralih ke latar belakang. Di Activity, nyaman menggunakan onStart dan onStop untuk mengelola siklus hidup callback. Di Fragment — onResume dan onPause.

Untuk menyederhanakan manajemen pendaftaran, dapat digunakan komponen Lifecycle-aware. Pustaka AndroidX Lifecycle memungkinkan pembuatan LifecycleObserver kustom yang secara otomatis mendaftarkan dan membatalkan callback saat status siklus hidup berubah.

Pendaftaran di layanan

Untuk tugas latar belakang, pendaftaran dilakukan di Service atau WorkManager. Penting untuk diingat bahwa di Android 8+ layanan latar belakang memiliki batasan untuk memulai. WorkManager dengan NetworkType — cara yang lebih andal untuk menjalankan tugas pada status jaringan tertentu, karena terintegrasi dengan API kompatibilitas dan mempertimbangkan mode Doze.

Metode utama NetworkCallback

NetworkCallback menyediakan serangkaian metode yang dipanggil saat status jaringan berubah. Tidak semua metode harus ditimpa — cukup implementasikan hanya yang diperlukan untuk tugas spesifik aplikasi. onAvailable dan onLost adalah minimal yang diperlukan untuk pemantauan dasar koneksi.

MetodeKapan dipanggilParameter
onAvailableJaringan tersedia untuk digunakanNetwork — objek jaringan
onLostJaringan hilang atau terputusNetwork — objek jaringan
onCapabilitiesChangedKemampuan jaringan berubahNetwork, NetworkCapabilities
onBlockedStatusChangedStatus pemblokiran berubahNetwork, Boolean
onNetworkSuspendedJaringan ditangguhkan oleh sistemNetwork
onNetworkResumedJaringan dilanjutkan setelah penangguhanNetwork

Metode onCapabilitiesChanged

Metode ini adalah kunci untuk mendapatkan informasi detail tentang jaringan. Parameter NetworkCapabilities berisi flag: NET_CAPABILITY_INTERNET — akses internet, NET_CAPABILITY_NOT_METERED — koneksi tak terbatas, NET_CAPABILITY_NOT_ROAMING — tanpa roaming. Juga dapat diketahui penundaan sinyal dan bandwidth.

Portal captive (captive portals) — kasus terpisah: saat terhubung ke jaringan Wi-Fi publik melalui portal, metode onCapabilitiesChanged tidak langsung menampilkan INTERNET. Pertama jaringan tersedia, tetapi tanpa internet — diperlukan otorisasi melalui browser. Pengembang harus mempertimbangkan penundaan ini dalam logika aplikasi.

Metode onBlockedStatusChanged

Dipanggil ketika sistem memblokir lalu lintas jaringan untuk aplikasi — misalnya, saat mengaktifkan mode hemat data atau membatasi data latar belakang. onBlockedStatusChanged memungkinkan aplikasi mengetahui bahwa permintaan jaringannya untuk sementara dilarang dan beralih ke pemrosesan lokal.

Contoh implementasi NetworkCallback

Mari kita lihat implementasi praktis NetworkCallback untuk melacak akses internet dan menangani portal captive. Dalam contoh di bawah ini ditunjukkan pemeriksaan NET_CAPABILITY_INTERNET dan validasi koneksi melalui permintaan HTTP ke server Google.

kotlin
val networkCallback = object : ConnectivityManager.NetworkCallback() {

    override fun onCapabilitiesChanged(
        network: Network,
        caps: NetworkCapabilities
    ) {
        val hasInternet = caps.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_INTERNET
        )
        val isMetered = caps.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_NOT_METERED
        ).not()

        when {
            hasInternet && isMetered ->
                Log.d("Network", "Data seluler terhubung")
            hasInternet ->
                Log.d("Network", "Wi-Fi terhubung")
            else ->
                Log.d("Network", "Tidak ada akses internet")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Koneksi hilang: ${network}")
        // Hentikan permintaan jaringan
    }
}

Penanganan portal captive

Saat terhubung ke jaringan publik dengan otorisasi (kafe, bandara), sistem pertama melaporkan onAvailable, tetapi onCapabilitiesChanged mungkin tidak menampilkan INTERNET. Dalam kasus seperti itu, diperlukan pemeriksaan tambahan melalui permintaan HTTP ke endpoint yang stabil, misalnya https://www.google.com/generate_204.

Jika permintaan mengembalikan kode 204 — internet tersedia. Jika pengalihan (301, 302, 307) — diperlukan otorisasi melalui browser. Dalam hal ini, dapat dibuka WebView atau Intent ke URL pengalihan untuk melakukan otentikasi di portal.

kotlin
fun Context.validateInternet(network: Network) {
    CoroutineScope(Dispatchers.IO).launch {
        try {
            val url = URL("https://www.google.com/generate_204")
            val connection =
                network.openConnection(url) as HttpURLConnection
            connection.instanceFollowRedirects = false
            connection.connect()
            when (connection.responseCode) {
                HttpURLConnection.HTTP_NO_CONTENT ->
                    Log.d("Network", "Internet tersedia")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Portal captive terdeteksi")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Validasi gagal: ${e.message}")
        }
    }
}

Perbedaan dari cara pemantauan jaringan lainnya

Sebelum NetworkCallback, metode utama pemantauan jaringan adalah BroadcastReceiver dengan filter android.net.conn.CONNECTIVITY_CHANGE. Pendekatan ini memiliki kekurangan signifikan: penundaan beberapa detik, kurangnya informasi tentang tipe antarmuka, konsumsi daya tinggi karena terus-menerus membangunkan perangkat.

Alternatif modern — LiveData atau StateFlow bersama dengan NetworkCallback. Polanya terdiri dari membungkus callback dalam aliran reaktif yang secara otomatis memberi tahu UI tentang perubahan status. Misalnya, MutableStateFlow dengan tipe NetworkStatus diperbarui di dalam metode callback, dan ViewCollector berlangganan perubahan.

MetodeAPI LevelPenundaanDetailKonsumsi Daya
BroadcastReceiver1+tinggirendahtinggi
NetworkCallback21+rendahtinggirendah
ConnectivityManager.getActiveNetwork23+instansedangnol
NWPathMonitor (iOS)iOS 12+rendahtinggirendah

Bekerja dengan mode latar belakang

Mulai Android 10, tingkat pembatasan latar belakang diperketat dan NetworkCallback mungkin tidak dipanggil saat aplikasi di latar belakang. Untuk tugas yang sangat penting — misalnya, memuat data saat jaringan muncul — gunakan WorkManager dengan pembatasan NetworkType.CONNECTED. WorkManager menjamin pelaksanaan tugas saat kondisi jaringan terpenuhi.

Di Android 12+ muncul pembatasan untuk pendaftaran manifes BroadcastReceiver untuk CONNECTIVITY_ACTION. Pengembang wajib bermigrasi ke NetworkCallback atau menggunakan WorkManager. Kebijakan Google Play sejak Agustus 2022 memerlukan penghapusan pendaftaran manifes untuk tindakan ini.

Pertanyaan Umum

Apa perbedaan antara NetworkCallback dan BroadcastReceiver untuk jaringan?

BroadcastReceiver dengan CONNECTIVITY_CHANGE hanya memberikan fakta perubahan jaringan tanpa detail dan dengan penundaan hingga beberapa detik. NetworkCallback bekerja secara asinkron, menyediakan objek Network, tipe antarmuka, kemampuan koneksi, dan tidak memerlukan pendaftaran manifes yang dilarang di Android 12+.

Bisakah NetworkCallback digunakan di mode latar belakang?

Di Android 10+ pembatasan latar belakang dapat menunda atau tidak memanggil NetworkCallback. Untuk tugas latar belakang gunakan WorkManager dengan pembatasan NetworkType — ia menjamin pekerjaan akan dilakukan saat kondisi terpenuhi terlepas dari mode hemat daya.

Bagaimana cara membatalkan pendaftaran NetworkCallback?

Panggil metode unregisterNetworkCallback pada ConnectivityManager, berikan instance callback yang sama yang digunakan saat pendaftaran. Callback yang tidak dibatalkan dapat menyebabkan kebocoran memori karena sistem menyimpan referensi ke sana. Selalu batalkan di onStop atau onDestroy.

Versi Android minimum apa yang diperlukan untuk NetworkCallback?

NetworkCallback tersedia mulai API Level 21 (Android 5.0 Lollipop). Untuk perangkat dengan versi lebih lama, gunakan BroadcastReceiver atau pustaka kompatibilitas seperti AndroidX Activity NetworkCallback yang membungkus API untuk dukungan yang lebih luas.

Bagaimana cara memeriksa status jaringan saat ini tanpa callback?

Gunakan ConnectivityManager.getActiveNetwork (API 23+) bersama dengan getNetworkCapabilities. Metode mengembalikan jaringan aktif saat ini secara sinkron, tanpa berlangganan perubahan. Untuk API 21-22 gunakan getActiveNetworkInfo yang ditandai sebagai deprecated di versi yang lebih baru.

Ringkasan

  • NetworkCallback — kelas abstrak Android SDK untuk pemantauan jaringan asinkron melalui ConnectivityManager tanpa polling terus-menerus.
  • Metode onAvailable memberitahu tentang koneksi jaringan, onLost — tentang kehilangan koneksi, onCapabilitiesChanged — tentang perubahan kemampuan jaringan.
  • Pendaftaran dilakukan melalui registerNetworkCallback dengan menentukan NetworkRequest dan instance callback.
  • Siklus hidup memerlukan pembatalan pendaftaran di onStop untuk Activity dan onPause untuk Fragment.
  • Portal captive ditangani melalui permintaan HTTP tambahan ke generate_204 untuk memeriksa akses internet nyata.
  • NetworkCallback telah menggantikan BroadcastReceiver untuk CONNECTIVITY_ACTION yang dilarang di manifes pada Android 12+.
  • Untuk tugas latar belakang gunakan WorkManager dengan NetworkType.CONNECTED daripada pendaftaran langsung NetworkCallback.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga