Connectivity Manager: apa itu, metode dan pemantauan koneksi

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

Connectivity Manager — adalah layanan sistem Android yang memberikan informasi kepada aplikasi tentang status koneksi jaringan perangkat. Ini memungkinkan untuk memeriksa keberadaan internet, menentukan jenis jaringan (Wi-Fi, data seluler, Ethernet), melacak perubahan koneksi dan mengelola permintaan jaringan tergantung pada kualitas komunikasi. Menurut Android Developers, 2025, ConnectivityManager adalah API utama untuk pemantauan jaringan dan merupakan bagian dari Android Framework sejak API Level 1.

Poin utama

  • Connectivity Manager — layanan sistem Android untuk memantau koneksi jaringan perangkat.
  • NetworkCallback — mekanisme utama untuk melacak perubahan jaringan melalui pendaftaran callback.
  • NetworkCapabilities — kelas yang memberikan informasi detail tentang kemampuan jaringan saat ini (Wi-Fi, data seluler, VPN, Ethernet).
  • NetworkRequest — filter untuk berlangganan ke jenis jaringan tertentu dengan karakteristik yang ditentukan.
  • getActiveNetworkInfo() — metode usang (deprecated sejak API 29), digantikan oleh NetworkCallback dan registerDefaultNetworkCallback.

Apa itu Connectivity Manager?

ConnectivityManager — adalah layanan sistem dari sistem operasi Android, dapat diakses melalui Context.getSystemService(Context.CONNECTIVITY_SERVICE). Ini menyediakan API untuk mendapatkan informasi tentang koneksi jaringan perangkat, memantau perubahan jaringan, dan mengelola permintaan jaringan aplikasi. Connectivity Manager telah menjadi bagian dari Android Framework sejak versi pertama platform (API Level 1) dan selama beberapa dekade telah mengalami perubahan signifikan: dari getActiveNetworkInfo() sederhana hingga model reaktif modern dengan NetworkCallback dan NetworkRequest.

Kemampuan utama Connectivity Manager meliputi: memeriksa keberadaan koneksi jaringan aktif, menentukan jenis jaringan (Wi-Fi, data seluler, Ethernet, Bluetooth, VPN), memantau perubahan status jaringan secara real-time, mendapatkan informasi tentang bandwidth dan latensi, mengelola permintaan jaringan aplikasi. ConnectivityManager digunakan bersama dengan WorkManager dan Repository untuk mengimplementasikan arsitektur Offline-First, pemuatan konten adaptif, dan optimalisasi kerja aplikasi tergantung pada kualitas koneksi.

Mulai dari Android 10 (API 29), Google mengubah pendekatan kerja dengan ConnectivityManager. Metode getActiveNetworkInfo() dinyatakan deprecated, dan sebagai gantinya direkomendasikan menggunakan registerDefaultNetworkCallback() atau registerNetworkCallback() dengan NetworkRequest. API baru memberikan informasi lebih detail tentang jaringan, termasuk kemampuan mendeteksi captive portal (Wi-Fi dengan otentikasi) dan mengevaluasi kualitas koneksi. ConnectivityManager juga terintegrasi dengan keluarga Jetpack: pustaka ConnectivityManager dirilis pada tahun 2024 sebagai bagian dari Jetpack untuk menyederhanakan pemantauan jaringan di aplikasi Compose.

Peran Connectivity Manager dalam arsitektur aplikasi

Dalam arsitektur Android modern, Connectivity Manager digunakan di tingkat repository atau UseCase untuk mengambil keputusan tentang permintaan jaringan. Lapisan Repository memeriksa status jaringan sebelum memanggil API: jika jaringan tidak tersedia, data dikembalikan dari penyimpanan lokal (Room). Jika jaringan tersedia, permintaan ke server dieksekusi dan hasilnya disimpan di Room. ViewModel berlangganan ke Flow dari Room dan tidak mengetahui detail interaksi jaringan — ini memungkinkan pengujian setiap lapisan secara independen.

Bagaimana Connectivity Manager bekerja

Connectivity Manager menerima informasi tentang status jaringan dari layanan sistem connectivity, yang berkomunikasi dengan antarmuka jaringan kernel Linux. Ketika perangkat terhubung ke Wi-Fi atau mengaktifkan data seluler, kernel memberitahu layanan sistem, yang memperbarui status internal dan memberitahu semua callback yang terdaftar. Arsitektur ConnectivityManager dibangun pada pola Observer: aplikasi mendaftarkan NetworkCallback dan menerima pemberitahuan tentang perubahan jaringan — munculnya koneksi, kehilangannya, perubahan jenis jaringan atau penurunan kualitas.

API modern ConnectivityManager menggunakan NetworkRequest untuk memfilter peristiwa jaringan. NetworkRequest memungkinkan menentukan persyaratan untuk jaringan: transport (Transport.WIFI, Transport.CELLULAR, Transport.ETHERNET), kemampuan akses internet (NetworkCapabilities.NET_CAPABILITY_INTERNET) dan kriteria lainnya. Jika aplikasi hanya membutuhkan Wi-Fi untuk mengunduh file besar, ia membuat NetworkRequest dengan Transport.WIFI dan mendaftarkan callback. Sistem akan memberitahu aplikasi hanya saat perubahan koneksi Wi-Fi, mengabaikan peristiwa jaringan seluler.

Fitur penting Connectivity Manager di Android 12+ — jaringan berbasis kemampuan (capabilities-based networking). Aplikasi tidak hanya memeriksa "apakah ada internet", tetapi dapat mengevaluasi jenis lalu lintas apa yang tersedia. Misalnya, NET_CAPABILITY_NOT_METERED menunjukkan koneksi tak terbatas (Wi-Fi), NET_CAPABILITY_NOT_ROAMING — bahwa perangkat tidak dalam roaming. Ini memungkinkan pengambilan keputusan: memuat video hanya melalui Wi-Fi, menunda sinkronisasi saat roaming, atau menggunakan data seluler hanya untuk permintaan kritis.

API LevelMetode yang direkomendasikanStatus
1-22getActiveNetworkInfo()Deprecated
21+NetworkCallback + registerNetworkCallback()Direkomendasikan
24+registerDefaultNetworkCallback()Direkomendasikan
28+getActiveNetwork() + NetworkCapabilitiesAlternatif
31+registerBestMatchingNetworkCallback()API baru

Izin untuk Connectivity Manager

Untuk menggunakan Connectivity Manager di aplikasi Android diperlukan izin. ACCESS_NETWORK_STATE — izin wajib untuk membaca informasi jaringan, dideklarasikan di AndroidManifest.xml. Tanpa izin ini, ConnectivityManager akan mengembalikan null untuk getActiveNetwork() dan tidak akan memanggil callback. Untuk melakukan operasi jaringan juga diperlukan izin INTERNET. Mulai dari Android 10 (API 29), aplikasi dapat memeriksa status jaringan tanpa izin runtime tambahan — ACCESS_NETWORK_STATE adalah izin normal (normal permission) dan diberikan secara otomatis saat instalasi.

Metode utama Connectivity Manager

Connectivity Manager modern menyediakan beberapa metode kunci untuk bekerja dengan jaringan. getActiveNetwork() (API 23+) mengembalikan objek Network dari jaringan aktif saat ini atau null jika perangkat tidak terhubung. Metode ini tidak memerlukan callback dan cocok untuk pemeriksaan satu kali. Objek Network dapat diteruskan ke NetworkCapabilities untuk mendapatkan informasi detail: jenis transport, status metered, roaming, kemampuan akses internet dan karakteristik lainnya.

registerDefaultNetworkCallback() (API 24+) — cara yang disukai untuk memantau jaringan. Aplikasi mendaftarkan callback yang dipanggil saat ada perubahan pada jaringan default (jaringan yang digunakan aplikasi untuk mengirim lalu lintas). Callback menerima objek Network yang dapat digunakan untuk mengikat soket dan klien HTTP. Metode ini menggantikan getActiveNetworkInfo() yang usang dan menyediakan pemantauan jaringan reaktif tanpa polling.

registerNetworkCallback() (API 21+) memungkinkan berlangganan perubahan jenis jaringan tertentu melalui NetworkRequest. Misalnya, aplikasi dapat melacak hanya jaringan Wi-Fi melalui new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(). Sistem akan memberi tahu aplikasi tentang koneksi/pemutusan Wi-Fi tanpa memengaruhi peristiwa jaringan seluler. NetworkCapabilities.getLinkDownstreamBandwidthKbps() mengembalikan perkiraan bandwidth saluran downstream dalam kbps, memungkinkan penyesuaian kualitas konten dengan kecepatan koneksi.

MetodeAPI minimalTujuan
getActiveNetwork()23Mendapatkan jaringan aktif saat ini
getNetworkCapabilities()21Mendapatkan kemampuan jaringan (jenis, metered, roaming)
registerDefaultNetworkCallback()24Memantau jaringan default
registerNetworkCallback()21Memantau jaringan berdasarkan filter NetworkRequest
unregisterNetworkCallback()21Membatalkan pendaftaran callback
getActiveNetworkInfo()1Usang (deprecated), jangan digunakan

ConnectivityManager di Jetpack Compose

Pustaka Jetpack Connectivity (androidx.core:core-ktx) menyediakan ekstensi yang nyaman untuk bekerja dengan ConnectivityManager di Compose. Fungsi ConnectivityManager.observeAsState() mengembalikan State<Boolean> yang diperbarui saat jaringan berubah. Komponen @Composable NetworkStatus() menampilkan status koneksi dan secara otomatis digambar ulang saat ada perubahan. Ini membebaskan pengembang dari pengelolaan callback dan siklus hidup Activity/Fragment secara manual.

NetworkCallback dan penanganan perubahan jaringan

ConnectivityManager.NetworkCallback — adalah kelas abstrak dengan metode yang dipanggil oleh sistem saat perubahan status jaringan. onAvailable(Network) — dipanggil ketika jaringan tersedia. Aplikasi menerima objek Network yang dapat digunakan untuk mengikat soket melalui Network.bindSocket(). onLost(Network) — dipanggil ketika jaringan tidak tersedia. Aplikasi harus beralih ke data lokal atau menampilkan pesan tentang tidak adanya koneksi. onCapabilitiesChanged(Network, NetworkCapabilities) — dipanggil saat perubahan karakteristik jaringan (misalnya, saat beralih dari Wi-Fi ke data seluler).

Penanganan perubahan jaringan yang benar memerlukan pertimbangan siklus hidup komponen. Callback harus didaftarkan di onStart()/onResume() dan dibatalkan di onStop()/onPause(). Jika callback tidak dibatalkan, ia dapat dipanggil setelah Activity dihancurkan, yang menyebabkan kebocoran memori. Dalam arsitektur Jetpack ViewModel, disarankan menggunakan lifecycleScope untuk mendaftarkan callback agar otomatis dibatalkan saat pembersihan ViewModel. Untuk layanan dan tugas latar belakang, WorkManager digunakan dengan batasan NetworkType.

Penanganan captive portal — kemampuan penting ConnectivityManager mulai Android 10. CAPTIVE_PORTAL — skenario ketika jaringan Wi-Fi tersedia tetapi memerlukan otentikasi melalui halaman web (bandara, hotel, kafe). NetworkCapabilities.NET_CAPABILITY_VALIDATED menunjukkan bahwa jaringan memiliki akses internet penuh. Jika NET_CAPABILITY_VALIDATED tidak ada, aplikasi dapat membuka browser untuk otentikasi melalui captive portal. Untuk mendeteksi captive portal digunakan metode isCaptivePortal(), ditambahkan di Android 11 (API 30).

Jaringan untuk tujuan spesifik (NetworkRequest)

ConnectivityManager memungkinkan meminta jaringan untuk tujuan tertentu melalui requestNetwork() dan bindProcessToNetwork(). Misalnya, aplikasi untuk mengunduh file besar dapat meminta jaringan Wi-Fi bahkan jika jaringan seluler aktif. Untuk ini, NetworkRequest dibuat dengan addTransportType(TRANSPORT_WIFI), dan ketika Wi-Fi muncul, sistem memanggil onAvailable(). Aplikasi mengikat soket ke jaringan ini melalui network.bindSocket() atau OkHttp dengan objek Network yang dikonfigurasi. Ini memberikan kontrol fleksibel atas penggunaan antarmuka jaringan.

Contoh implementasi di Kotlin

Mari kita lihat contoh lengkap penggunaan ConnectivityManager dengan API modern (NetworkCallback) dalam arsitektur Clean Architecture. NetworkMonitor — kelas pembungkus di atas ConnectivityManager yang menyediakan status jaringan reaktif melalui StateFlow. ViewModel berlangganan ke Flow ini dan meneruskan status ke UI. Repository menggunakan NetworkMonitor untuk mengambil keputusan tentang permintaan jaringan. Pendekatan ini memastikan testabilitas dan isolasi ketergantungan platform.

Contoh di bawah menunjukkan cara menggunakan ConnectivityManager dengan registerDefaultNetworkCallback dengan benar. Kelas NetworkMonitor mengenkapsulasi pekerjaan dengan layanan sistem dan menyediakan Kotlin Flow<Boolean> yang bersih. Ia mendaftarkan callback saat startup dan membatalkannya saat siklus hidup berakhir. Pekerjaan asinkron disediakan melalui coroutine dan callbackFlow — jembatan antara gaya callback ConnectivityManager dan gaya Flow reaktif Kotlin.

kotlin
class NetworkMonitor(
    private val connectivityManager: ConnectivityManager
) {
    val isOnline: StateFlow<Boolean> = callbackFlow {
        val callback = object : ConnectivityManager.NetworkCallback() {
            override fun onAvailable(network: Network) {
                trySend(true)
            }
            override fun onLost(network: Network) {
                trySend(false)
            }
            override fun onCapabilitiesChanged(
                network: Network,
                caps: NetworkCapabilities
            ) {
                val connected = caps.hasCapability(
                    NetworkCapabilities.NET_CAPABILITY_INTERNET
                )
                trySend(connected)
            }
        }
        connectivityManager.registerDefaultNetworkCallback(callback)
        awaitClose {
            connectivityManager.unregisterNetworkCallback(callback)
        }
    }.stateIn(
        CoroutineScope(Dispatchers.Default),
        SharingStarted.WhileSubscribed(5000),
        initialValue = checkInitialState()
    )

    private fun checkInitialState(): Boolean {
        val network = connectivityManager.getActiveNetwork() ?: return false
        val caps = connectivityManager.getNetworkCapabilities(network) ?: return false
        return caps.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_INTERNET
        )
    }
}

Penggunaan NetworkMonitor di ViewModel dan Repository

ViewModel berlangganan NetworkMonitor.isOnline melalui stateIn() dan meneruskan status ke Compose. Repository memeriksa nilai saat ini dari isOnline.value sebelum memanggil API: jika false — mengembalikan Flow dari Room. Jika true — memanggil API, menyimpan hasil di Room dan mengembalikan Flow dari Room. WorkManager menggunakan NetworkType.CONNECTED untuk membatasi tugas latar belakang. Pengujian NetworkMonitor dilakukan dengan objek mock ConnectivityManager dan fake NetworkCallback, memungkinkan emulasi skenario jaringan apa pun dalam pengujian unit.

Best Practices dan kesalahan umum

Aturan pertama bekerja dengan ConnectivityManager — jangan gunakan API yang usang. getActiveNetworkInfo() sudah deprecated sejak API 29 dan dapat mengembalikan data yang tidak akurat pada versi Android baru. Sebagai gantinya, gunakan getActiveNetwork() + getNetworkCapabilities() untuk pemeriksaan satu kali dan registerDefaultNetworkCallback() untuk pemantauan terus-menerus. Metode lama tidak membedakan jaringan dengan captive portal dan internet penuh, yang menyebabkan hasil positif palsu.

Aturan kedua — selalu batalkan pendaftaran callback. Jika Activity mendaftarkan NetworkCallback di onStart() tetapi tidak membatalkannya di onStop(), callback terus berfungsi setelah Activity dihancurkan. Ini menyebabkan kebocoran memori dan potensi NullPointerException ketika callback mencoba memperbarui UI komponen yang dihancurkan. Gunakan lifecycleScope atau repeatOnLifecycle untuk manajemen pendaftaran otomatis. Di Jetpack Compose, gunakan DisposableEffect untuk mendaftarkan dan membatalkan callback.

Kesalahan umum ketiga — hanya memeriksa keberadaan jaringan tanpa mempertimbangkan kualitasnya. Sekadar "ada internet" tidak cukup untuk pengambilan keputusan. Aplikasi harus memeriksa NET_CAPABILITY_NOT_METERED untuk mengunduh file besar, NET_CAPABILITY_NOT_ROAMING untuk sinkronisasi latar belakang, NET_CAPABILITY_VALIDATED untuk konfirmasi akses internet. Mengabaikan flag ini menyebabkan aplikasi mencoba memuat video saat roaming atau menyinkronkan data melalui captive portal hotel.

Keempat — jangan gunakan ConnectivityManager untuk memeriksa ketersediaan server tertentu. ConnectivityManager melaporkan status jaringan di perangkat, tetapi tidak menjamin server tersedia. Untuk memeriksa ketersediaan API, gunakan permintaan HTTP dengan timeout pendek atau Health Check. ConnectivityManager + ping HTTP adalah kombinasi yang andal: pertama, keberadaan jaringan diperiksa, kemudian permintaan ringan dikirim ke server untuk mengonfirmasi ketersediaan sebenarnya.

Pengujian ConnectivityManager

Untuk pengujian unit, gunakan Robolectric dengan ShadowConnectivityManager, yang memungkinkan emulasi status jaringan. Untuk pengujian integrasi — Android Test Orchestrator dengan mengganti Mode Pesawat. Dalam pengujian, periksa skenario: transisi dari online ke offline, munculnya Wi-Fi saat jaringan seluler aktif, kehilangan jaringan selama permintaan, captive portal, roaming. Untuk mocking dalam pengujian modular, gunakan antarmuka pembungkus (misalnya, NetworkMonitorInterface) yang dapat diganti dengan objek mock tanpa ketergantungan platform.

Pertanyaan yang sering diajukan

Bagaimana cara memeriksa apakah perangkat terhubung ke internet?

Cara modern — gunakan registerDefaultNetworkCallback() dengan pemeriksaan NET_CAPABILITY_INTERNET di onCapabilitiesChanged(). Untuk pemeriksaan satu kali: connectivityManager.getActiveNetwork()?.let { caps -> caps.hasCapability(NET_CAPABILITY_INTERNET) } ?: false. Metode usang getActiveNetworkInfo() tidak direkomendasikan sejak API 29+.

Izin apa yang diperlukan untuk ConnectivityManager?

Untuk membaca informasi jaringan diperlukan izin android.permission.ACCESS_NETWORK_STATE. Ini adalah izin normal (normal permission) — diberikan secara otomatis saat instalasi aplikasi dan tidak memerlukan permintaan runtime. Untuk melakukan operasi jaringan (permintaan HTTP) juga diperlukan izin INTERNET.

Apa perbedaan antara registerDefaultNetworkCallback dan registerNetworkCallback?

registerDefaultNetworkCallback() melacak jaringan default — jaringan yang digunakan aplikasi untuk mengirim lalu lintas utama. registerNetworkCallback(NetworkRequest) melacak jaringan yang sesuai dengan filter yang ditentukan (misalnya, hanya Wi-Fi). Callback default lebih sederhana dan mencakup 90% skenario, request kustom untuk persyaratan khusus jenis jaringan.

Bagaimana cara menentukan jenis jaringan: Wi-Fi atau data seluler?

Gunakan NetworkCapabilities: caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) untuk Wi-Fi, hasTransport(TRANSPORT_CELLULAR) untuk data seluler. Jangan gunakan ConnectivityManager.getActiveNetworkInfo().getType() — metode ini sudah deprecated. NetworkCapabilities tersedia melalui connectivityManager.getNetworkCapabilities(network).

Mengapa getActiveNetworkInfo() sudah usang?

getActiveNetworkInfo() sudah usang karena ketidakakuratan: tidak membedakan jaringan dengan captive portal dan internet penuh, tidak memberikan informasi tentang bandwidth dan roaming. Mulai Android 10, metode ini dapat mengembalikan null atau data yang salah untuk koneksi multi-jaringan (multi-network). Pengganti — getActiveNetwork() + NetworkCapabilities.

Ringkasan

  • ConnectivityManager — layanan sistem Android untuk memantau koneksi jaringan, dapat diakses melalui getSystemService(CONNECTIVITY_SERVICE).
  • API modern — registerDefaultNetworkCallback() + NetworkCapabilities, menggantikan getActiveNetworkInfo() yang usang sejak API 29.
  • NetworkCapabilities — kelas untuk memeriksa jenis jaringan (Wi-Fi, Cellular), metered, roaming dan validasi koneksi internet.
  • NetworkCallback — mekanisme pemantauan reaktif dengan metode onAvailable, onLost dan onCapabilitiesChanged untuk melacak perubahan jaringan.
  • NetworkRequest — filter untuk berlangganan jaringan jenis tertentu, digunakan dengan registerNetworkCallback() untuk kontrol yang tepat.
  • Izin ACCESS_NETWORK_STATE — wajib untuk bekerja dengan ConnectivityManager, diberikan secara otomatis saat instalasi aplikasi.
  • Best Practices — batalkan callback di onStop(), periksa NET_CAPABILITY_NOT_METERED dan NET_CAPABILITY_VALIDATED, jangan hanya mengandalkan keberadaan jaringan tanpa pemeriksaan kualitas.

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