Connectivity Manager: co to je, metody a monitorovánà pÅ™ipojenÃ

Autor: IT Sectr Publikováno: 2026-03-10 Doba čtení: 9 min

Connectivity Manager — je systémová služba Androidu, která poskytuje aplikacÃm informace o stavu síťového pÅ™ipojenà zaÅ™ÃzenÃ. Umožňuje kontrolovat pÅ™Ãtomnost internetu, urÄovat typ sítÄ› (Wi-Fi, mobilnà data, Ethernet), sledovat zmÄ›ny v pÅ™ipojenà a Å™Ãdit síťové požadavky v závislosti na kvalitÄ› komunikace. Podle Android Developers, 2025 je ConnectivityManager hlavnÃm API pro monitorovánà sítÄ› a je souÄástà Android Framework od API Level 1.

Hlavnà body

  • Connectivity Manager — systémová služba Androidu pro monitorovánà síťového pÅ™ipojenà zaÅ™ÃzenÃ.
  • NetworkCallback — hlavnà mechanismus sledovánà zmÄ›n sítÄ› prostÅ™ednictvÃm registrace callbacků.
  • NetworkCapabilities — tÅ™Ãda poskytujÃcà podrobné informace o možnostech aktuálnà sítÄ› (Wi-Fi, mobilnà data, VPN, Ethernet).
  • NetworkRequest — filtr pro pÅ™ihlášenà k odbÄ›ru urÄitých typů sítà s danými charakteristikami.
  • getActiveNetworkInfo() — zastaralá metoda (deprecated od API 29), nahrazena NetworkCallback a registerDefaultNetworkCallback.

Co je Connectivity Manager?

ConnectivityManager — je systémová služba operaÄnÃho systému Android, dostupná prostÅ™ednictvÃm Context.getSystemService(Context.CONNECTIVITY_SERVICE). Poskytuje API pro zÃskávánà informacà o síťovém pÅ™ipojenà zaÅ™ÃzenÃ, monitorovánà zmÄ›n sítÄ› a Å™Ãzenà síťových požadavků aplikace. Connectivity Manager je souÄástà Android Framework od prvnà verze platformy (API Level 1) a bÄ›hem desetiletà proÅ¡el významnými zmÄ›nami: od jednoduchého getActiveNetworkInfo() až po modernà reaktivnà model s NetworkCallback a NetworkRequest.

Hlavnà možnosti Connectivity Manager zahrnujÃ: kontrolu pÅ™Ãtomnosti aktivnÃho síťového pÅ™ipojenÃ, urÄovánà typu sítÄ› (Wi-Fi, mobilnà data, Ethernet, Bluetooth, VPN), sledovánà zmÄ›n stavu sítÄ› v reálném Äase, zÃskávánà informacà o Å¡ÃÅ™ce pásma a zpoždÄ›nÃ, Å™Ãzenà síťových požadavků aplikace. ConnectivityManager je použÃván spoleÄnÄ› s WorkManager a Repository pro implementaci Offline-First architektury, adaptivnÃho naÄÃtánà obsahu a optimalizace práce aplikace v závislosti na kvalitÄ› pÅ™ipojenÃ.

Od Androidu 10 (API 29) Google zmÄ›nil pÅ™Ãstup k práci s ConnectivityManager. Metoda getActiveNetworkInfo() byla prohlášena za deprecated a mÃsto nà se doporuÄuje použÃvat registerDefaultNetworkCallback() nebo registerNetworkCallback() s NetworkRequest. Nové API poskytuje podrobnÄ›jšà informace o síti, vÄetnÄ› možnosti detekce captive portálů (Wi-Fi s autentizacÃ) a hodnocenà kvality pÅ™ipojenÃ. ConnectivityManager je také integrován s rodinou Jetpack: knihovna ConnectivityManager byla vydána v roce 2024 jako souÄást Jetpack pro zjednoduÅ¡enà monitorovánà sítÄ› v aplikacÃch Compose.

Role Connectivity Manager v architektuře aplikace

V modernà Android architektuÅ™e je ConnectivityManager použÃván na úrovni repository nebo UseCase pro rozhodovánà o síťových požadavcÃch. Vrstva Repository kontroluje stav sítÄ› pÅ™ed volánÃm API: pokud je síť nedostupná, vracejà se data z místnÃho úložiÅ¡tÄ› (Room). Pokud je síť dostupná, provede se požadavek na server a výsledek se uložà do Room. ViewModel se pÅ™ihlásà k odbÄ›ru Flow z Room a nezná detaily síťové interakce — to umožňuje snadné testovánà každé vrstvy nezávisle.

Jak funguje Connectivity Manager

Connectivity Manager získává informace o stavu sítÄ› od systémové služby connectivity, která komunikuje se síťovými rozhranÃmi jádra Linux. Když se zaÅ™Ãzenà pÅ™ipojà k Wi-Fi nebo zapne mobilnà data, jádro informuje systémovou službu, která aktualizuje vnitÅ™nà stav a informuje vÅ¡echny registrované callbacky. Architektura ConnectivityManager je postavena na vzoru Observer: aplikace registruje NetworkCallback a dostává upozornÄ›nà na jakékoli zmÄ›ny sítÄ› — vznik pÅ™ipojenÃ, jeho ztrátu, zmÄ›nu typu sítÄ› nebo zhorÅ¡enà kvality.

Modernà API ConnectivityManager použÃvá NetworkRequest k filtrovánà síťových událostÃ. NetworkRequest umožňuje specifikovat požadavky na síť: transport (Transport.WIFI, Transport.CELLULAR, Transport.ETHERNET), možnost pÅ™Ãstupu k internetu (NetworkCapabilities.NET_CAPABILITY_INTERNET) a dalšà kritéria. Pokud aplikace potÅ™ebuje pouze Wi-Fi pro stahovánà velkých souborů, vytvořà NetworkRequest s Transport.WIFI a zaregistruje callback. Systém bude aplikaci informovat pouze pÅ™i zmÄ›nÄ› Wi-Fi pÅ™ipojenÃ, ignoruje události mobilnà sítÄ›.

Důležitou vlastnostà Connectivity Manager na Android 12+ je capabilities-based networking. Aplikace nejen kontroluje, zda je internet, ale může vyhodnotit, jaký typ provozu je k dispozici. NapÅ™Ãklad NET_CAPABILITY_NOT_METERED oznaÄuje neomezené pÅ™ipojenà (Wi-Fi), NET_CAPABILITY_NOT_ROAMING — že zaÅ™Ãzenà nenà v roamingu. To umožňuje rozhodovánÃ: naÄÃtat video pouze pÅ™es Wi-Fi, odložit synchronizaci v roamingu nebo použÃvat mobilnà data pouze pro kritické požadavky.

API LevelDoporuÄená metodaStav
1-22getActiveNetworkInfo()Deprecated
21+NetworkCallback + registerNetworkCallback()DoporuÄeno
24+registerDefaultNetworkCallback()DoporuÄeno
28+getActiveNetwork() + NetworkCapabilitiesAlternativa
31+registerBestMatchingNetworkCallback()Nové API

Oprávněnà pro Connectivity Manager

Pro použità Connectivity Manager v aplikaci Android jsou vyžadována oprávnÄ›nÃ. ACCESS_NETWORK_STATE — povinné oprávnÄ›nà pro Ätenà informacà o síti, deklarované v AndroidManifest.xml. Bez tohoto oprávnÄ›nà ConnectivityManager vrátà null pro getActiveNetwork() a nebude volat callbacky. Pro provádÄ›nà síťových operacà je také vyžadováno oprávnÄ›nà INTERNET. Od Android 10 (API 29) může aplikace kontrolovat stav sítÄ› bez dalÅ¡Ãch runtime oprávnÄ›nà — ACCESS_NETWORK_STATE je běžné oprávnÄ›nà (normal permission) a je udÄ›leno automaticky pÅ™i instalaci.

Hlavnà metody Connectivity Manager

Modernà Connectivity Manager poskytuje nÄ›kolik klÃÄových metod pro práci se sítí. getActiveNetwork() (API 23+) vracà objekt Network aktuálnà aktivnà sítÄ› nebo null, pokud zaÅ™Ãzenà nenà pÅ™ipojeno. Tato metoda nevyžaduje callbacky a je vhodná pro jednorázovou kontrolu. Objekt Network lze pÅ™edat do NetworkCapabilities pro získánà podrobných informacÃ: typ transportu, metered stav, roaming, možnost pÅ™Ãstupu k internetu a dalšà charakteristiky.

registerDefaultNetworkCallback() (API 24+) — preferovaný způsob monitorovánà sítÄ›. Aplikace zaregistruje callback, který je volán pÅ™i jakýchkoli zmÄ›nách výchozà sítÄ› (sítÄ›, pÅ™es kterou aplikace odesílá provoz). Callback obdržà objekt Network, který lze použÃt pro pÅ™ipojenà socketů a HTTP klientů. Tato metoda nahrazuje zastaralý getActiveNetworkInfo() a zajišťuje reaktivnà monitorovánà sítÄ› bez pollingu.

registerNetworkCallback() (API 21+) umožňuje pÅ™ihlásit se k odbÄ›ru zmÄ›n urÄitého typu sítÄ› prostÅ™ednictvÃm NetworkRequest. NapÅ™Ãklad aplikace může sledovat pouze Wi-Fi sítÄ› pÅ™es new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(). Systém bude aplikaci informovat o pÅ™ipojenÃ/odpojenà od Wi-Fi, aniž by ovlivnil události mobilnà sítÄ›. NetworkCapabilities.getLinkDownstreamBandwidthKbps() vracà odhad Å¡ÃÅ™ky pásma downstream kanálu v kbps, což umožňuje pÅ™izpůsobit kvalitu obsahu rychlosti pÅ™ipojenÃ.

MetodaMinimálnà APIÚÄel
getActiveNetwork()23Získánà aktuálnà aktivnà sítě
getNetworkCapabilities()21Získánà možnostà sítě (typ, metered, roaming)
registerDefaultNetworkCallback()24Monitorovánà výchozà sítě
registerNetworkCallback()21Monitorovánà sítà podle filtru NetworkRequest
unregisterNetworkCallback()21Zrušenà registrace callbacku
getActiveNetworkInfo()1Zastaralé (deprecated), nepoužÃvat

ConnectivityManager v Jetpack Compose

Knihovna Jetpack Connectivity (androidx.core:core-ktx) poskytuje pohodlná rozÅ¡ÃÅ™enà pro práci s ConnectivityManager v Compose. Funkce ConnectivityManager.observeAsState() vracà State<Boolean>, který se aktualizuje pÅ™i zmÄ›nÄ› sítÄ›. Komponenta @Composable NetworkStatus() zobrazuje stav pÅ™ipojenà a automaticky se pÅ™ekresluje pÅ™i zmÄ›nách. To zbavuje vývojáře ruÄnà správy callbacků a životnÃho cyklu Activity/Fragment.

NetworkCallback a zpracovánà změn sítě

ConnectivityManager.NetworkCallback — je abstraktnà tÅ™Ãda s metodami, které systém volá pÅ™i zmÄ›nÄ› stavu sítÄ›. onAvailable(Network) — je volána, když se síť stane dostupnou. Aplikace obdržà objekt Network, který lze použÃt pro pÅ™ipojenà socketů prostÅ™ednictvÃm Network.bindSocket(). onLost(Network) — je volána, když se síť stane nedostupnou. Aplikace by mÄ›la pÅ™epnout na místnà data nebo zobrazit zprávu o chybÄ›jÃcÃm pÅ™ipojenÃ. onCapabilitiesChanged(Network, NetworkCapabilities) — je volána pÅ™i zmÄ›nÄ› charakteristik sítÄ› (napÅ™Ãklad pÅ™i pÅ™epínánà z Wi-Fi na mobilnà data).

Správné zpracovánà zmÄ›n sítÄ› vyžaduje zohlednÄ›nà životnÃho cyklu komponenty. Callback by mÄ›l být zaregistrován v onStart()/onResume() a zruÅ¡en v onStop()/onPause(). Pokud callback nenà zruÅ¡en, může být volán po zniÄenà Activity, což vede k úniku pamÄ›ti. V architektuÅ™e Jetpack ViewModel se doporuÄuje použÃvat lifecycleScope pro registraci callbacku, aby byl automaticky zruÅ¡en pÅ™i ÄiÅ¡tÄ›nà ViewModel. Pro služby a úlohy na pozadà se použÃvá WorkManager s omezenÃm NetworkType.

Zpracovánà captive portálů — důležitá vlastnost ConnectivityManager od Android 10. CAPTIVE_PORTAL — scénář, kdy je Wi-Fi síť dostupná, ale vyžaduje autentizaci prostÅ™ednictvÃm webové stránky (letiÅ¡tÄ›, hotely, kavárny). NetworkCapabilities.NET_CAPABILITY_VALIDATED indikuje, že síť má plný pÅ™Ãstup k internetu. Pokud NET_CAPABILITY_VALIDATED chybÃ, aplikace může otevÅ™Ãt prohlÞeÄ pro autentizaci prostÅ™ednictvÃm captive portálu. Pro detekci captive portálu se použÃvá metoda isCaptivePortal(), pÅ™idaná v Android 11 (API 30).

Síť pro specifické úÄely (NetworkRequest)

ConnectivityManager umožňuje požádat síť pro konkrétnà úÄely prostÅ™ednictvÃm requestNetwork() a bindProcessToNetwork(). NapÅ™Ãklad aplikace pro stahovánà velkých souborů může požadovat Wi-Fi síť, i když je aktivnà mobilnÃ. K tomu se vytvořà NetworkRequest s addTransportType(TRANSPORT_WIFI) a když se Wi-Fi objevÃ, systém zavolá onAvailable(). Aplikace pÅ™ipojà sockety k této síti prostÅ™ednictvÃm network.bindSocket() nebo OkHttp s nakonfigurovaným Network objektem. To poskytuje flexibilnà kontrolu nad použÃvánÃm síťových rozhranÃ.

PÅ™Ãklad implementace v Kotlinu

Podívejme se na úplný pÅ™Ãklad použità ConnectivityManager s modernÃm API (NetworkCallback) v architektuÅ™e Clean Architecture. NetworkMonitor — tÅ™Ãda obalujÃcà ConnectivityManager, která poskytuje reaktivnà stav sítÄ› prostÅ™ednictvÃm StateFlow. ViewModel se pÅ™ihlásà k odbÄ›ru tohoto Flow a pÅ™edává stav do UI. Repository použÃvá NetworkMonitor pro rozhodovánà o síťových požadavcÃch. Tento pÅ™Ãstup zajišťuje testovatelnost a izolaci platforemových závislostÃ.

NásledujÃcà pÅ™Ãklad ukazuje, jak správnÄ› použÃvat ConnectivityManager s registerDefaultNetworkCallback. TÅ™Ãda NetworkMonitor zapouzdÅ™uje práci se systémovou službou a poskytuje Äistý Kotlin Flow<Boolean>. Registruje callback pÅ™i startu a rušà jej pÅ™i ukonÄenà životnÃho cyklu. Asynchronnà práce je zajiÅ¡tÄ›na prostÅ™ednictvÃm korutin a callbackFlow — mostu mezi callback stylem ConnectivityManager a reaktivnÃm Flow stylem 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
        )
    }
}

Použità NetworkMonitor v ViewModel a Repository

ViewModel se pÅ™ihlásà k odbÄ›ru NetworkMonitor.isOnline prostÅ™ednictvÃm stateIn() a pÅ™edává stav do Compose. Repository kontroluje aktuálnà hodnotu isOnline.value pÅ™ed volánÃm API: pokud je false — vracà Flow z Room. Pokud je true — volá API, ukládá výsledek do Room a vracà Flow z Room. WorkManager použÃvá NetworkType.CONNECTED pro omezenà úloh na pozadÃ. Testovánà NetworkMonitor se provádà s mock objektem ConnectivityManager a fake NetworkCallback, což umožňuje emulovat libovolné scénáře sítÄ› v jednotkových testech.

Best Practices a Äasté chyby

Prvnà pravidlo práce s ConnectivityManager — nepoužÃvat zastaralé API. getActiveNetworkInfo() je deprecated od API 29 a může vracet nesprávná data na nových verzÃch Androidu. MÃsto nÄ›j použijte getActiveNetwork() + getNetworkCapabilities() pro jednorázovou kontrolu a registerDefaultNetworkCallback() pro průběžné monitorovánÃ. Stará metoda nerozliÅ¡uje sítÄ› s captive portálem od úplného internetu, což vede k faleÅ¡ným výsledkům.

Druhé pravidlo — vždy zruÅ¡it registraci callbacku. Pokud Activity zaregistruje NetworkCallback v onStart(), ale nezrušà v onStop(), callback pokraÄuje v práci po zniÄenà Activity. To způsobuje únik pamÄ›ti a potenciálnà NullPointerException, když callback zkusà aktualizovat UI zniÄené komponenty. Použijte lifecycleScope nebo repeatOnLifecycle pro automatickou správu registrace. V Jetpack Compose použijte DisposableEffect pro registraci a zruÅ¡enà callbacku.

TÅ™età Äastá chyba — kontrola pouze existence sítÄ› bez ohledu na jejà kvalitu. Pouhé "existuje internet" nestaÄà k rozhodovánÃ. Aplikace by mÄ›la kontrolovat NET_CAPABILITY_NOT_METERED pro stahovánà velkých souborů, NET_CAPABILITY_NOT_ROAMING pro synchronizaci na pozadÃ, NET_CAPABILITY_VALIDATED pro potvrzenà pÅ™Ãstupu k internetu. Ignorovánà tÄ›chto pÅ™Ãznaků vede k tomu, že se aplikace pokoušà naÄÃtat video v roamingu nebo synchronizovat data prostÅ™ednictvÃm captive portálu hotelu.

Ätvrté — nepoužÃvat ConnectivityManager pro kontrolu dostupnosti konkrétnÃho serveru. ConnectivityManager hlásà stav sítÄ› na zaÅ™ÃzenÃ, ale nezaruÄuje, že je server dostupný. Pro kontrolu dostupnosti API použijte HTTP požadavek s krátkým timeoutem nebo Health Check. ConnectivityManager + HTTP ping je spolehlivá kombinace: nejprve se zkontroluje pÅ™Ãtomnost sítÄ›, poté se provede lehký požadavek na server pro potvrzenà skuteÄné dostupnosti.

Testovánà ConnectivityManager

Pro jednotkové testy použijte Robolectric s ShadowConnectivityManager, který umožňuje emulovat stav sítÄ›. Pro integraÄnà testy — Android Test Orchestrator s pÅ™epínáním Režimu letadlo. V testech kontrolujte scénáře: pÅ™echod z online do offline, výskyt Wi-Fi pÅ™i aktivnà mobilnà síti, ztráta sítÄ› bÄ›hem provádÄ›nà požadavku, captive portál, roaming. Pro mockovánà v modulárnÃch testech použijte rozhranà wrapperu (napÅ™. NetworkMonitorInterface), které lze nahradit mock objektem bez platforemových závislostÃ.

Äasto kladené otázky

Jak zkontrolovat, zda je zaÅ™Ãzenà pÅ™ipojeno k internetu?

Modernà způsob — použijte registerDefaultNetworkCallback() s kontrolou NET_CAPABILITY_INTERNET v onCapabilitiesChanged(). Pro jednorázovou kontrolu: connectivityManager.getActiveNetwork()?.let { caps -> caps.hasCapability(NET_CAPABILITY_INTERNET) } ?: false. Zastaralá metoda getActiveNetworkInfo() se nedoporuÄuje od API 29+.

Jaké oprávněnà je potřeba pro ConnectivityManager?

Pro Ätenà informacà o síti je vyžadováno oprávnÄ›nà android.permission.ACCESS_NETWORK_STATE. Jedná se o běžné oprávnÄ›nà (normal permission) — je udÄ›leno automaticky pÅ™i instalaci aplikace a nevyžaduje runtime žádost. Pro provádÄ›nà síťových operacà (HTTP požadavky) je také vyžadováno oprávnÄ›nà INTERNET.

Jaký je rozdíl mezi registerDefaultNetworkCallback a registerNetworkCallback?

registerDefaultNetworkCallback() sleduje výchozà síť — tu, pÅ™es kterou aplikace odesílá hlavnà provoz. registerNetworkCallback(NetworkRequest) sleduje sítÄ› odpovídajÃcà zadanému filtru (napÅ™. pouze Wi-Fi). Výchozà callback je jednoduššà a pokrývá 90% scénářů, vlastnà request je pro specifické požadavky na typ sítÄ›.

Jak urÄit typ sítÄ›: Wi-Fi nebo mobilnà data?

Použijte NetworkCapabilities: caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) pro Wi-Fi, hasTransport(TRANSPORT_CELLULAR) pro mobilnà data. NepoužÃvejte ConnectivityManager.getActiveNetworkInfo().getType() — tato metoda je deprecated. NetworkCapabilities je dostupný prostÅ™ednictvÃm connectivityManager.getNetworkCapabilities(network).

ProÄ je getActiveNetworkInfo() zastaralý?

getActiveNetworkInfo() je zastaralý kvůli nepÅ™esnosti: nerozliÅ¡uje sítÄ› s captive portálem od úplného internetu, neposkytuje informace o Å¡ÃÅ™ce pásma a roamingu. Od Androidu 10 tato metoda může vrátit null nebo nesprávná data pro vÃcekanálová pÅ™ipojenà (multi-network). Náhrada — getActiveNetwork() + NetworkCapabilities.

ShrnutÃ

  • ConnectivityManager — systémová služba Androidu pro monitorovánà síťového pÅ™ipojenÃ, dostupná prostÅ™ednictvÃm getSystemService(CONNECTIVITY_SERVICE).
  • Modernà API — registerDefaultNetworkCallback() + NetworkCapabilities, nahrazujÃcà zastaralý getActiveNetworkInfo() od API 29.
  • NetworkCapabilities — tÅ™Ãda pro kontrolu typu sítÄ› (Wi-Fi, Cellular), metered, roamingu a validace internetového pÅ™ipojenÃ.
  • NetworkCallback — mechanismus reaktivnÃho monitorovánà s metodami onAvailable, onLost a onCapabilitiesChanged pro sledovánà zmÄ›n sítÄ›.
  • NetworkRequest — filtr pro pÅ™ihlášenà k odbÄ›ru sítà urÄitého typu, použÃvaný s registerNetworkCallback() pro pÅ™esnou kontrolu.
  • OprávnÄ›nà ACCESS_NETWORK_STATE — povinné pro práci s ConnectivityManager, udÄ›lené automaticky pÅ™i instalaci aplikace.
  • Best Practices — ruÅ¡it callbacky v onStop(), kontrolovat NET_CAPABILITY_NOT_METERED a NET_CAPABILITY_VALIDATED, nespoléhat jen na existenci sítÄ› bez kontroly kvality.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také