NetworkCallback: ano ito, aplikasyon at paghawak ng network sa Android

May-akda: IT Sectr Nai-publish: 2026-03-10 Oras ng pagbabasa: 9 min

NetworkCallback — isang abstract na klase sa Android SDK para sa pagsubaybay ng mga pagbabago sa estado ng network sa pamamagitan ng ConnectivityManager. Ayon sa Android Developers Documentation (2025), ang paggamit ng NetworkCallback ay nagpapahintulot sa app na tumugon agad sa koneksyon, pagkadiskonekta o pagbabago ng mga katangian ng koneksyon. ConnectivityManager.NetworkCallback ay nagbibigay ng detalyadong impormasyon tungkol sa uri ng network, mga captive portal at pagkawala ng internet nang walang patuloy na pag-poll sa system service.

Mga Pangunahing Punto

  • NetworkCallback — built-in na abstract na klase ng Android SDK para sa pagsubaybay ng estado ng network sa pamamagitan ng ConnectivityManager.
  • Metodo onAvailable ay tinatawag kapag ang device ay kumonekta sa network, na nagpapadala ng Network object na may mga detalye ng koneksyon.
  • Metodo onLost ay na-trigger kapag nawala ang koneksyon sa network, na nagpapahintulot sa app na ihinto ang mga network request.
  • Metodo onCapabilitiesChanged ay nagpapaalam tungkol sa pagbabago ng mga kakayahan ng network — paglitaw ng internet, captive portal o bayad na koneksyon.
  • Pagrehistro ay ginagawa sa pamamagitan ng registerNetworkCallback, pagkansela — sa pamamagitan ng unregisterNetworkCallback sa lifecycle ng app.

Ano ang NetworkCallback?

NetworkCallback — ay isang abstract na klase mula sa package na android.net, na bahagi ng Android SDK. Ito ay dinisenyo para sa pagtanggap ng mga abiso tungkol sa mga pagbabago sa estado ng koneksyon sa network sa pamamagitan ng system service na ConnectivityManager.

Bago ang pagdating ng NetworkCallback, ang mga developer ay gumamit ng mga broadcast receiver na BroadcastReceiver para sa pagsubaybay ng network. Ang pamamaraang ito ay nangangailangan ng patuloy na pagrehistro sa manifest, gumana nang may pagkaantala, at hindi nagbigay ng detalyadong impormasyon tungkol sa mga katangian ng koneksyon. Android 5.0 (API 21) ay nagpakilala ng NetworkCallback bilang isang mas flexible at mahusay na alternatibo.

Ang callback ay gumagana nang asynchronous: ang app ay nag-subscribe sa mga event sa pamamagitan ng ConnectivityManager, at ang system ay tumatawag sa mga metodo ng callback kapag nagbago ang estado ng network. Ito ay nag-aalis ng pangangailangan para sa periodic polling ng network status, na nakakatipid ng mga resources ng baterya at processor.

Paano gumagana ang callback sa Android

ConnectivityManager ay namamahala sa lahat ng network interfaces ng device — Wi-Fi, mobile data, Ethernet, VPN. Kapag nagbago ang alinman sa mga interface na ito, ang system ay lumilikha ng Network object at ipinapadala ito sa kaukulang metodo ng narehistrong callback. Ang bawat Network ay may natatanging identifier na nagbabago sa muling pagkonekta.

Ang callback ay hindi nakatali sa isang partikular na uri ng network — maaari nitong subaybayan ang lahat ng magagamit na interfaces nang sabay-sabay. Para sa pag-filter ng mga uri ng koneksyon, ginagamit ang klase na NetworkRequest, kung saan tinutukoy ang mga kinakailangang transport protocol (Wi-Fi, cellular data, Ethernet) at mga kakayahan ng network.

Paano magrehistro ng NetworkCallback sa app

Ang pagrehistro ng NetworkCallback ay ginagawa sa pamamagitan ng metodo na ConnectivityManager.registerNetworkCallback. Ang unang parameter ay NetworkRequest.Builder na naglalarawan ng mga kinakailangan sa network, ang pangalawa — isang instance ng callback. Para sa operasyon, kinakailangan ang permiso na ACCESS_NETWORK_STATE sa manifest.

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", "Available: ${network}")
        }

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

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

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

Pagrehistro sa Activity at Fragment

Inirerekomenda na irehistro ang NetworkCallback kapag ang app ay nasa foreground at kanselahin kapag lumipat sa background. Sa Activity, maginhawang gamitin ang onStart at onStop para sa pamamahala ng lifecycle ng callback. Sa Fragment — onResume at onPause.

Para sa pagpapasimple ng pamamahala ng pagrehistro, maaaring gamitin ang Lifecycle-aware na mga component. Ang library na AndroidX Lifecycle ay nagpapahintulot na lumikha ng custom na LifecycleObserver na awtomatikong nagrerehistro at nagkakansela ng callback kapag nagbago ang estado ng lifecycle.

Pagrehistro sa serbisyo

Para sa mga background task, ang pagrehistro ay ginagawa sa Service o WorkManager. Mahalagang isaalang-alang na sa Android 8+ ang mga background services ay may mga limitasyon sa pagsisimula. WorkManager na may NetworkType — isang mas maaasahang paraan para sa pagsasagawa ng mga task sa partikular na estado ng network, dahil ito ay integrated sa compatibility API at isinasaalang-alang ang Doze mode.

Mga pangunahing metodo ng NetworkCallback

Ang NetworkCallback ay nagbibigay ng isang set ng mga metodo na tinatawag kapag nagbago ang estado ng network. Hindi lahat ng metodo ay kailangang i-override — sapat na ang implementasyon lamang ng mga kinakailangan para sa partikular na task ng app. onAvailable at onLost ay minimal na kinakailangan para sa basic na pagsubaybay ng koneksyon.

MetodoKailan tinatawagMga Parameter
onAvailableAng network ay available para gamitinNetwork — object ng network
onLostAng network ay nawala o nadiskonektaNetwork — object ng network
onCapabilitiesChangedNagbago ang mga kakayahan ng networkNetwork, NetworkCapabilities
onBlockedStatusChangedNagbago ang status ng pag-blockNetwork, Boolean
onNetworkSuspendedAng network ay sinuspinde ng systemNetwork
onNetworkResumedAng network ay ipinagpatuloy pagkatapos ng suspensyonNetwork

Metodo onCapabilitiesChanged

Ang metodong ito ay susi para sa pagkuha ng detalyadong impormasyon tungkol sa network. Ang parameter na NetworkCapabilities ay naglalaman ng mga flag: NET_CAPABILITY_INTERNET — access sa internet, NET_CAPABILITY_NOT_METERED — walang limitasyong koneksyon, NET_CAPABILITY_NOT_ROAMING — walang roaming. Maaari ring malaman ang signal delay at bandwidth.

Ang mga captive portal — hiwalay na kaso: kapag kumokonekta sa pampublikong Wi-Fi network sa pamamagitan ng portal, ang metodo na onCapabilitiesChanged ay hindi agad nagpapakita ng INTERNET. Una ang network ay available, ngunit walang internet — kinakailangan ang awtorisasyon sa pamamagitan ng browser. Dapat isaalang-alang ng developer ang pagkaantala na ito sa lohika ng app.

Metodo onBlockedStatusChanged

Tinatawag kapag hinaharangan ng system ang network traffic para sa app — halimbawa, kapag nag-activate ng data saving mode o naglilimita ng background data. onBlockedStatusChanged ay nagpapahintulot sa app na malaman na ang mga network request nito ay pansamantalang ipinagbabawal at lumipat sa lokal na pagproseso.

Mga halimbawa ng implementasyon ng NetworkCallback

Tingnan natin ang praktikal na implementasyon ng NetworkCallback para sa pagsubaybay ng access sa internet at paghawak ng mga captive portal. Sa halimbawa sa ibaba ay ipinapakita ang pagsusuri ng NET_CAPABILITY_INTERNET at validation ng koneksyon sa pamamagitan ng HTTP request sa Google server.

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", "Nakonekta ang mobile data")
            hasInternet ->
                Log.d("Network", "Nakonekta ang Wi-Fi")
            else ->
                Log.d("Network", "Walang access sa internet")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Nawala ang koneksyon: ${network}")
        // Ihinto ang mga network request
    }
}

Paghawak ng mga captive portal

Kapag kumokonekta sa pampublikong network na may awtorisasyon (café, airport), ang system ay unang nag-uulat ng onAvailable, ngunit ang onCapabilitiesChanged ay maaaring hindi magpakita ng INTERNET. Sa ganitong mga kaso, kinakailangan ang karagdagang pagsusuri sa pamamagitan ng HTTP request sa isang matatag na endpoint, halimbawa https://www.google.com/generate_204.

Kung ang request ay nagbabalik ng code 204 — may internet. Kung redirect (301, 302, 307) — kinakailangan ang awtorisasyon sa pamamagitan ng browser. Sa kasong ito, maaaring buksan ang WebView o Intent sa redirect URL para sa pag-authenticate sa 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", "Available ang internet")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Natukoy ang captive portal")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Nabigo ang validation: ${e.message}")
        }
    }
}

Mga pagkakaiba mula sa ibang paraan ng pagsubaybay sa network

Bago ang NetworkCallback, ang pangunahing paraan ng pagsubaybay sa network ay BroadcastReceiver na may filter na android.net.conn.CONNECTIVITY_CHANGE. Ang pamamaraang ito ay may malalaking disadvantages: pagkaantala ng ilang segundo, kakulangan ng impormasyon tungkol sa uri ng interface, mataas na konsumo ng kuryente dahil sa patuloy na paggising ng device.

Modernong alternatibo — LiveData o StateFlow kasama ng NetworkCallback. Ang pattern ay binubuo ng pagbabalot ng callback sa isang reactive stream na awtomatikong nagpapaalam sa UI tungkol sa pagbabago ng estado. Halimbawa, ang MutableStateFlow na may uri na NetworkStatus ay ina-update sa loob ng mga metodo ng callback, at ang ViewCollector ay nag-subscribe sa mga pagbabago.

ParaanAPI LevelPagkaantalaDetalyeKonsumo ng Kuryente
BroadcastReceiver1+mataasmababamataas
NetworkCallback21+mababamataasmababa
ConnectivityManager.getActiveNetwork23+agadkatamtamanzero
NWPathMonitor (iOS)iOS 12+mababamataasmababa

Paggawa sa background mode

Simula sa Android 10, ang antas ng mga background restriction ay pinahigpit at ang NetworkCallback ay maaaring hindi tawagin kapag ang app ay nasa background. Para sa mga kritikal na mahahalagang task — halimbawa, pag-load ng data kapag lumitaw ang network — gamitin ang WorkManager na may restriction na NetworkType.CONNECTED. Ginagarantiya ng WorkManager ang pagsasagawa ng task kapag natugunan ang mga kondisyon ng network.

Sa Android 12+ ay lumitaw ang paghihigpit para sa pagrehistro sa manifest ng BroadcastReceiver para sa CONNECTIVITY_ACTION. Ang mga developer ay obligadong lumipat sa NetworkCallback o gumamit ng WorkManager. Ang patakaran ng Google Play mula Agosto 2022 ay nangangailangan ng pag-alis ng pagrehistro sa manifest para sa aksyong ito.

Mga Madalas Itanong

Ano ang pagkakaiba sa pagitan ng NetworkCallback at BroadcastReceiver para sa network?

Ang BroadcastReceiver na may CONNECTIVITY_CHANGE ay nagbibigay lamang ng katotohanan ng pagbabago ng network nang walang detalye at may pagkaantala ng hanggang ilang segundo. NetworkCallback ay gumagana nang asynchronous, nagbibigay ng Network object, uri ng interface, mga kakayahan ng koneksyon at hindi nangangailangan ng pagrehistro sa manifest na ipinagbabawal sa Android 12+.

Maaari bang gamitin ang NetworkCallback sa background mode?

Sa Android 10+ ang mga background restriction ay maaaring maantala o hindi tumawag ng NetworkCallback. Para sa mga background task gamitin ang WorkManager na may NetworkType restriction — ginagarantiya nito ang pagsasagawa ng trabaho kapag natugunan ang mga kondisyon anuman ang power saving mode.

Paano kanselahin ang pagrehistro ng NetworkCallback?

Tawagan ang metodo na unregisterNetworkCallback sa ConnectivityManager, na ipinapasa ang parehong instance ng callback na ginamit sa pagrehistro. Ang hindi nakanselang callback ay maaaring magdulot ng memory leak dahil ang system ay nag-iingat ng reference dito. Palaging kanselahin sa onStop o onDestroy.

Anong bersyon ng Android ang minimum na kinakailangan para sa NetworkCallback?

Ang NetworkCallback ay available simula sa API Level 21 (Android 5.0 Lollipop). Para sa mga device na may mas lumang bersyon, gamitin ang BroadcastReceiver o mga compatibility library tulad ng AndroidX Activity NetworkCallback na bumabalot ng API para sa mas malawak na suporta.

Paano suriin ang kasalukuyang estado ng network nang walang callback?

Gamitin ang ConnectivityManager.getActiveNetwork (API 23+) kasama ng getNetworkCapabilities. Ang metodo ay nagbabalik ng kasalukuyang aktibong network nang synchronously, nang walang pag-subscribe sa mga pagbabago. Para sa API 21-22 gamitin ang getActiveNetworkInfo na minarkahan bilang deprecated sa mga mas bagong bersyon.

Buod

  • NetworkCallback — abstract na klase ng Android SDK para sa asynchronous na pagsubaybay ng network sa pamamagitan ng ConnectivityManager nang walang patuloy na pag-poll.
  • Metodo onAvailable ay nagpapaalam tungkol sa koneksyon sa network, onLost — tungkol sa pagkawala ng koneksyon, onCapabilitiesChanged — tungkol sa pagbabago ng mga kakayahan ng network.
  • Pagrehistro ay ginagawa sa pamamagitan ng registerNetworkCallback na may pagtukoy ng NetworkRequest at instance ng callback.
  • Lifecycle ay nangangailangan ng pagkansela ng pagrehistro sa onStop para sa Activity at onPause para sa Fragment.
  • Mga captive portal ay hinahawakan sa pamamagitan ng karagdagang HTTP request sa generate_204 para suriin ang tunay na access sa internet.
  • NetworkCallback ay pumalit sa BroadcastReceiver para sa CONNECTIVITY_ACTION na ipinagbabawal sa manifest sa Android 12+.
  • Para sa mga background task gamitin ang WorkManager na may NetworkType.CONNECTED sa halip na direktang pagrehistro ng NetworkCallback.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din