NetworkCallback: mi ez, alkalmazás és hálózatkezelés Androidban

Szerző: IT Sectr Megjelenés: 2026-03-10 Olvasási idő: 9 perc

NetworkCallback — egy absztrakt osztály az Android SDK-ban a hálózati állapotváltozások monitorozására a ConnectivityManager-en keresztül. A Android Developers Documentation (2025) szerint a NetworkCallback használata lehetővé teszi az alkalmazás számára, hogy időben reagáljon a csatlakozásra, leválásra vagy a kapcsolat jellemzőinek megváltozására. ConnectivityManager.NetworkCallback részletes információkat nyújt a hálózat típusáról, a captive portálokról és az internet elvesztéséről a rendszerszolgáltatás folyamatos lekérdezése nélkül.

Főbb pontok

  • NetworkCallback — beépített absztrakt osztály az Android SDK-ban a hálózati állapot követésére a ConnectivityManager-en keresztül.
  • Az onAvailable metódus akkor hívódik meg, amikor az eszköz csatlakozik a hálózathoz, átadva a Network objektumot a kapcsolat részleteivel.
  • Az onLost metódus a hálózati kapcsolat elvesztésekor aktiválódik, lehetővé téve az alkalmazás számára a hálózati kérések leállítását.
  • Az onCapabilitiesChanged metódus értesít a hálózati képességek változásáról — internet megjelenéséről, captive portálról vagy fizetős kapcsolatról.
  • Regisztráció a registerNetworkCallback segítségével történik, törlés — az unregisterNetworkCallback segítségével az alkalmazás életciklusában.

Mi az a NetworkCallback?

NetworkCallback — egy absztrakt osztály az android.net csomagból, amely az Android SDK részét képezi. Arra szolgál, hogy értesítéseket kapjon a hálózati kapcsolat állapotának változásairól a ConnectivityManager rendszerszolgáltatáson keresztül.

A NetworkCallback megjelenése előtt a fejlesztők BroadcastReceiver műsorszóró vevőket használtak a hálózat követésére. Ez a megközelítés állandó regisztrációt igényelt a manifestben, késleltetéssel működött, és nem adott részletes információt a kapcsolat jellemzőiről. Android 5.0 (API 21) bevezette a NetworkCallback-et, mint rugalmasabb és hatékonyabb alternatívát.

A callback aszinkron módon működik: az alkalmazás feliratkozik az eseményekre a ConnectivityManager-en keresztül, és a rendszer meghívja a callback metódusait a hálózati állapot változásakor. Ez kiküszöböli a hálózati állapot időszakos lekérdezésének (polling) szükségességét, így kímélve az akkumulátor és a processzor erőforrásait.

Hogyan működik a callback Androidban

A ConnectivityManager kezeli az eszköz összes hálózati interfészét — Wi-Fi, mobil adatok, Ethernet, VPN. Bármelyik interfész megváltozásakor a rendszer létrehoz egy Network objektumot, és továbbítja a regisztrált callback megfelelő metódusához. Minden Network egyedi azonosítóval rendelkezik, amely újracsatlakozáskor megváltozik.

A callback nincs egy adott hálózati típushoz kötve — egyszerre képes követni az összes elérhető interfészt. A kapcsolattípusok szűréséhez a NetworkRequest osztályt használják, ahol megadják a szükséges szállítási protokollokat (Wi-Fi, mobil adatok, Ethernet) és a hálózati képességeket.

Hogyan regisztráljuk a NetworkCallback-et az alkalmazásban

A NetworkCallback regisztrációja a ConnectivityManager.registerNetworkCallback metóduson keresztül történik. Az első paraméter a NetworkRequest.Builder, amely leírja a hálózatra vonatkozó követelményeket, a második — a callback egy példánya. A működéshez ACCESS_NETWORK_STATE engedély szükséges a manifestben.

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", "Elérhető: ${network}")
        }

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

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

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

Regisztráció Activity-ben és Fragment-ben

Ajánlott a NetworkCallback regisztrálása akkor, amikor az alkalmazás az előtérben van, és törlése a háttérbe kerüléskor. Activity-ben kényelmes az onStart és onStop használata a callback életciklusának kezelésére. Fragment-ben — onResume és onPause.

A regisztráció kezelésének egyszerűsítéséhez Lifecycle-aware komponensek használhatók. Az AndroidX Lifecycle könyvtár lehetővé teszi egy egyéni LifecycleObserver létrehozását, amely automatikusan regisztrálja és törli a callback-et az életciklus állapotának változásakor.

Regisztráció szolgáltatásban

Háttérfeladatokhoz a regisztráció Service-ben vagy WorkManager-ben történik. Fontos figyelembe venni, hogy Android 8+ ban a háttérszolgáltatások indítási korlátozásokkal rendelkeznek. WorkManager NetworkType-val — megbízhatóbb mód a feladatok végrehajtására adott hálózati állapot mellett, mivel integrálva van a kompatibilitási API-val, és figyelembe veszi a Doze módot.

A NetworkCallback fő metódusai

A NetworkCallback metóduskészletet biztosít, amelyek a hálózati állapot változásakor hívódnak meg. Nem kötelező az összes metódust felülírni — elegendő csak azokat implementálni, amelyek az alkalmazás adott feladatához szükségesek. Az onAvailable és onLost minimálisan szükségesek az alapvető kapcsolatfigyeléshez.

MetódusMikor hívódik megParaméterek
onAvailableA hálózat elérhető használatraNetwork — hálózati objektum
onLostA hálózat elveszett vagy lekapcsolódottNetwork — hálózati objektum
onCapabilitiesChangedA hálózati képességek megváltoztakNetwork, NetworkCapabilities
onBlockedStatusChangedA blokkolási állapot megváltozottNetwork, Boolean
onNetworkSuspendedA hálózatot a rendszer felfüggesztetteNetwork
onNetworkResumedA hálózat a felfüggesztés után folytatódottNetwork

Az onCapabilitiesChanged metódus

Ez a metódus kulcsfontosságú a részletes hálózati információk megszerzéséhez. A NetworkCapabilities paraméter jelzőket tartalmaz: NET_CAPABILITY_INTERNET — internet hozzáférés, NET_CAPABILITY_NOT_METERED — korlátlan kapcsolat, NET_CAPABILITY_NOT_ROAMING — nincs roaming. Továbbá megtudható a jel késleltetése és a sávszélesség.

A captive portálok (captive portals) — külön eset: nyilvános Wi-Fi hálózathoz portálon keresztül csatlakozva az onCapabilitiesChanged metódus nem mutat azonnal INTERNET-et. Először a hálózat elérhető, de internet nélkül — böngészőn keresztüli hitelesítés szükséges. A fejlesztőnek figyelembe kell vennie ezt a késleltetést az alkalmazás logikájában.

Az onBlockedStatusChanged metódus

Akkor hívódik meg, amikor a rendszer blokkolja a hálózati forgalmat az alkalmazás számára — például adattakarékos mód bekapcsolásakor vagy a háttéradatok korlátozásakor. onBlockedStatusChanged lehetővé teszi az alkalmazás számára, hogy megtudja, hálózati kérései ideiglenesen tiltva vannak, és átváltson helyi feldolgozásra.

Példák a NetworkCallback implementációjára

Tekintsük át a NetworkCallback gyakorlati megvalósítását az internet-hozzáférés követésére és a captive portálok kezelésére. Az alábbi példában a NET_CAPABILITY_INTERNET ellenőrzése és a kapcsolat érvényesítése HTTP kéréssel a Google szerverhez látható.

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", "Mobil adat csatlakoztatva")
            hasInternet ->
                Log.d("Network", "Wi-Fi csatlakoztatva")
            else ->
                Log.d("Network", "Nincs internet hozzáférés")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Kapcsolat elveszett: ${network}")
        // Hálózati kérések leállítása
    }
}

Captive portálok kezelése

Amikor hitelesítést igénylő nyilvános hálózathoz csatlakozik (kávézó, repülőtér), a rendszer először onAvailable-t jelez, de az onCapabilitiesChanged nem biztos, hogy mutat INTERNET-et. Ilyen esetekben további ellenőrzés szükséges HTTP kéréssel egy stabil végponthoz, például https://www.google.com/generate_204.

Ha a kérés 204-es kódot ad vissza — van internet. Ha átirányítás (301, 302, 307) — böngészőn keresztüli hitelesítés szükséges. Ebben az esetben megnyitható WebView vagy Intent az átirányítási URL-re a portálon történő hitelesítéshez.

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", "Az internet elérhető")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Captive portal észlelve")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Érvényesítés sikertelen: ${e.message}")
        }
    }
}

Különbségek más hálózatfigyelési módszerektől

A NetworkCallback előtt a hálózatfigyelés fő módszere a BroadcastReceiver volt az android.net.conn.CONNECTIVITY_CHANGE szűrővel. Ennek a megközelítésnek jelentős hátrányai voltak: több másodperces késleltetés, hiányzó információ az interfész típusáról, megnövekedett energiafogyasztás az eszköz folyamatos ébresztése miatt.

Modern alternatíva — LiveData vagy StateFlow a NetworkCallback-kel párosítva. A minta abból áll, hogy a callback-et reaktív adatfolyamba csomagolják, amely automatikusan értesíti a UI-t az állapotváltozásról. Például a NetworkStatus típusú MutableStateFlow frissül a callback metódusain belül, a ViewCollector pedig feliratkozik a változásokra.

MódszerAPI LevelKésleltetésRészletességEnergiafogyasztás
BroadcastReceiver1+magasalacsonymagas
NetworkCallback21+alacsonymagasalacsony
ConnectivityManager.getActiveNetwork23+azonnaliközepesnulla
NWPathMonitor (iOS)iOS 12+alacsonymagasalacsony

Munka háttérmódban

Android 10-től kezdve a háttérkorlátozások szintje szigorodott, és a NetworkCallback előfordulhat, hogy nem hívódik meg, amikor az alkalmazás a háttérben van. Kritikusan fontos feladatokhoz — például adatbetöltés a hálózat megjelenésekor — használja a WorkManager-t NetworkType.CONNECTED korlátozással. A WorkManager garantálja a feladat végrehajtását a hálózati feltételek teljesülése esetén.

Android 12+ ban korlátozás jelent meg a BroadcastReceiver manifest regisztrációjára a CONNECTIVITY_ACTION számára. A fejlesztők kötelesek átállni NetworkCallback-re vagy WorkManager-t használni. A Google Play irányelv 2022 augusztusától megköveteli a manifest regisztráció eltávolítását ehhez a művelethez.

Gyakran Ismételt Kérdések

Mi a különbség a NetworkCallback és a BroadcastReceiver között hálózati szempontból?

A BroadcastReceiver a CONNECTIVITY_CHANGE-el csak a hálózatváltozás tényét adja meg részletek nélkül, akár több másodperces késleltetéssel. NetworkCallback aszinkron módon működik, Network objektumot, interfész típust, kapcsolati képességeket biztosít, és nem igényel manifest regisztrációt, ami Android 12+ ban tiltott.

Használható a NetworkCallback háttérmódban?

Android 10+ ban a háttérkorlátozások késleltethetik vagy nem hívhatják meg a NetworkCallback-et. Háttérfeladatokhoz használja a WorkManager-t NetworkType korlátozással — garantálja a munka elvégzését a feltételek teljesülése esetén, függetlenül az energiatakarékos módtól.

Hogyan töröljük a NetworkCallback regisztrációját?

Hívja meg az unregisterNetworkCallback metódust a ConnectivityManager-en, átadva ugyanazt a callback példányt, amelyet a regisztrációnál használt. A nem törölt callback memóriaszivárgást okozhat, mivel a rendszer tárolja a referenciát. Mindig törölje az onStop vagy onDestroy metódusban.

Melyik Android verzió minimálisan szükséges a NetworkCallback-hez?

A NetworkCallback API Level 21 (Android 5.0 Lollipop) től kezdve érhető el. Régebbi verziójú eszközökhöz használjon BroadcastReceiver-t vagy kompatibilitási könyvtárakat, mint az AndroidX Activity NetworkCallback, amelyek becsomagolják az API-t a szélesebb körű támogatáshoz.

Hogyan ellenőrizhető a hálózat aktuális állapota callback nélkül?

Használja a ConnectivityManager.getActiveNetwork (API 23+) metódust a getNetworkCapabilities segítségével. A metódus szinkron módon visszaadja az aktuális aktív hálózatot, feliratkozás nélkül a változásokra. API 21-22 hez használja a getActiveNetworkInfo-t, amely újabb verziókban deprecated-ként van jelölve.

Összefoglalás

  • NetworkCallback — absztrakt osztály az Android SDK-ban aszinkron hálózatfigyelésre a ConnectivityManager-en keresztül, állandó lekérdezés nélkül.
  • Az onAvailable metódus értesít a hálózati kapcsolatról, onLost — a kapcsolat elvesztéséről, onCapabilitiesChanged — a hálózati képességek változásáról.
  • Regisztráció a registerNetworkCallback segítségével történik a NetworkRequest és a callback példány megadásával.
  • Életciklus megköveteli a regisztráció törlését az onStop-ban Activity és az onPause-ban Fragment esetén.
  • Captive portálok további HTTP kéréssel kezelhetők a generate_204-hez a valós internet-hozzáférés ellenőrzéséhez.
  • NetworkCallback felváltotta a BroadcastReceiver-t a CONNECTIVITY_ACTION számára, amely tiltott a manifestben Android 12+ ban.
  • Háttérfeladatokhoz használjon WorkManager-t NetworkType.CONNECTED-del a közvetlen NetworkCallback regisztráció helyett.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is