Connectivity Manager: wat is het, methoden en connectiviteitsmonitoring

Auteur: IT Sectr Gepubliceerd: 2026-03-10 Leestijd: 9 min

Connectivity Manager — is de Android-systeemdienst die applicaties informatie geeft over de netwerkverbindingsstatus van het apparaat. Het maakt het mogelijk om de aanwezigheid van internet te controleren, het netwerktype (Wi-Fi, mobiele data, Ethernet) te bepalen, veranderingen in de verbinding te volgen en netwerkverzoeken te beheren op basis van de communicatiekwaliteit. Volgens Android Developers, 2025 is ConnectivityManager de primaire API voor netwerkmonitoring en maakt het deel uit van het Android Framework vanaf API Level 1.

Belangrijkste punten

  • Connectivity Manager — Android-systeemdienst voor het monitoren van de netwerkverbinding van het apparaat.
  • NetworkCallback — het belangrijkste mechanisme voor het volgen van netwerkveranderingen via het registreren van callbacks.
  • NetworkCapabilities — klasse die gedetailleerde informatie geeft over de mogelijkheden van het huidige netwerk (Wi-Fi, mobiele data, VPN, Ethernet).
  • NetworkRequest — filter voor het abonneren op specifieke netwerktypes met bepaalde kenmerken.
  • getActiveNetworkInfo() — verouderde methode (deprecated sinds API 29), vervangen door NetworkCallback en registerDefaultNetworkCallback.

Wat is Connectivity Manager?

ConnectivityManager — is de systeemdienst van het Android-besturingssysteem, toegankelijk via Context.getSystemService(Context.CONNECTIVITY_SERVICE). Het biedt een API voor het verkrijgen van informatie over de netwerkverbinding van het apparaat, het monitoren van netwerkveranderingen en het beheren van netwerkverzoeken van de applicatie. Connectivity Manager maakt sinds de eerste versie van het platform (API Level 1) deel uit van het Android Framework en heeft in de loop der jaren aanzienlijke veranderingen ondergaan: van eenvoudige getActiveNetworkInfo() tot het moderne reactieve model met NetworkCallback en NetworkRequest.

De belangrijkste mogelijkheden van Connectivity Manager omvatten: controleren op een actieve netwerkverbinding, bepalen van het netwerktype (Wi-Fi, mobiele data, Ethernet, Bluetooth, VPN), real-time monitoren van netwerkstatuswijzigingen, verkrijgen van informatie over bandbreedte en latentie, beheren van netwerkverzoeken van de applicatie. ConnectivityManager wordt gebruikt in combinatie met WorkManager en Repository voor het implementeren van Offline-First architectuur, adaptief laden van content en optimalisatie van de app-werking op basis van de verbindingskwaliteit.

Vanaf Android 10 (API 29) heeft Google de benadering van werken met ConnectivityManager gewijzigd. De methode getActiveNetworkInfo() is verouderd (deprecated) verklaard en in plaats daarvan wordt het gebruik van registerDefaultNetworkCallback() of registerNetworkCallback() met NetworkRequest aanbevolen. De nieuwe API biedt meer gedetailleerde informatie over het netwerk, inclusief de mogelijkheid om captive portals (Wi-Fi met authenticatie) te detecteren en de verbindingskwaliteit te beoordelen. ConnectivityManager is ook geïntegreerd met de Jetpack-familie: de ConnectivityManager-bibliotheek werd in 2024 uitgebracht als onderdeel van Jetpack om netwerkmonitoring in Compose-apps te vereenvoudigen.

De rol van Connectivity Manager in de app-architectuur

In de moderne Android-architectuur wordt Connectivity Manager gebruikt op repository- of UseCase-niveau om beslissingen te nemen over netwerkverzoeken. De Repository-laag controleert de netwerkstatus voordat de API wordt aangeroepen: als het netwerk niet beschikbaar is, worden gegevens uit de lokale opslag (Room) geretourneerd. Als het netwerk beschikbaar is, wordt een verzoek naar de server uitgevoerd en wordt het resultaat in Room opgeslagen. ViewModel abonneert zich op Flow uit Room en weet niets van de details van de netwerkinteractie — dit maakt het mogelijk om elke laag onafhankelijk te testen.

Hoe werkt Connectivity Manager

Connectivity Manager ontvangt informatie over de netwerkstatus van de systeemdienst connectivity, die communiceert met de netwerkinterfaces van de Linux-kernel. Wanneer het apparaat verbinding maakt met Wi-Fi of mobiele data inschakelt, stelt de kernel de systeemdienst op de hoogte, die de interne status bijwerkt en alle geregistreerde callbacks op de hoogte stelt. De architectuur van ConnectivityManager is gebaseerd op het Observer-patroon: de applicatie registreert NetworkCallback en ontvangt meldingen over netwerkveranderingen — het verschijnen van een verbinding, het verlies ervan, verandering van netwerktype of kwaliteitsvermindering.

De moderne ConnectivityManager API gebruikt NetworkRequest voor het filteren van netwerkgebeurtenissen. NetworkRequest maakt het mogelijk om vereisten voor het netwerk te specificeren: transport (Transport.WIFI, Transport.CELLULAR, Transport.ETHERNET), internettoegang (NetworkCapabilities.NET_CAPABILITY_INTERNET) en andere criteria. Als een app alleen Wi-Fi nodig heeft voor het downloaden van grote bestanden, maakt het een NetworkRequest met Transport.WIFI en registreert een callback. Het systeem zal de app alleen op de hoogte stellen bij een verandering van de Wi-Fi-verbinding, waarbij gebeurtenissen van het mobiele netwerk worden genegeerd.

Een belangrijke functie van Connectivity Manager op Android 12+ is capabilities-based networking. De app controleert niet alleen "of er internet is", maar kan ook beoordelen welk type verkeer beschikbaar is. NET_CAPABILITY_NOT_METERED geeft bijvoorbeeld een onbeperkte verbinding aan (Wi-Fi), NET_CAPABILITY_NOT_ROAMING — dat het apparaat niet in roaming is. Dit maakt het mogelijk om beslissingen te nemen: video alleen via Wi-Fi laden, synchronisatie in roaming uitstellen, of mobiele data alleen voor kritieke verzoeken gebruiken.

API LevelAanbevolen methodeStatus
1-22getActiveNetworkInfo()Deprecated
21+NetworkCallback + registerNetworkCallback()Aanbevolen
24+registerDefaultNetworkCallback()Aanbevolen
28+getActiveNetwork() + NetworkCapabilitiesAlternatief
31+registerBestMatchingNetworkCallback()Nieuwe API

Rechten voor Connectivity Manager

Voor het gebruik van Connectivity Manager in een Android-app zijn rechten vereist. ACCESS_NETWORK_STATE — de verplichte machtiging voor het lezen van netwerkinformatie, gedeclareerd in AndroidManifest.xml. Zonder deze machtiging retourneert ConnectivityManager null voor getActiveNetwork() en worden callbacks niet aangeroepen. Voor het uitvoeren van netwerkoperaties is ook de INTERNET-machtiging vereist. Vanaf Android 10 (API 29) kan de app de netwerkstatus controleren zonder extra runtime-machtigingen — ACCESS_NETWORK_STATE is een normale machtiging (normal permission) en wordt automatisch verleend bij installatie.

Belangrijkste methoden van Connectivity Manager

De moderne Connectivity Manager biedt verschillende belangrijke methoden voor het werken met het netwerk. getActiveNetwork() (API 23+) retourneert het Network-object van het huidige actieve netwerk of null als het apparaat niet is verbonden. Deze methode vereist geen callbacks en is geschikt voor eenmalige controles. Het Network-object kan worden doorgegeven aan NetworkCapabilities voor gedetailleerde informatie: transporttype, metered-status, roaming, internettoegang en andere kenmerken.

registerDefaultNetworkCallback() (API 24+) — de voorkeursmanier voor netwerkmonitoring. De app registreert een callback die wordt aangeroepen bij elke wijziging van het standaardnetwerk (het netwerk waarover de app verkeer verzendt). De callback ontvangt een Network-object dat kan worden gebruikt voor het binden van sockets en HTTP-cliënten. Deze methode vervangt de verouderde getActiveNetworkInfo() en zorgt voor reactieve netwerkmonitoring zonder polling.

registerNetworkCallback() (API 21+) maakt het mogelijk om te abonneren op wijzigingen van een specifiek netwerktype via NetworkRequest. Een app kan bijvoorbeeld alleen Wi-Fi-netwerken volgen via new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(). Het systeem zal de app op de hoogte stellen van het verbinden/verbreken van Wi-Fi zonder gebeurtenissen van het mobiele netwerk te beïnvloeden. NetworkCapabilities.getLinkDownstreamBandwidthKbps() retourneert de geschatte bandbreedte van het downstream-kanaal in kbps, waardoor de contentkwaliteit kan worden aangepast aan de verbindingssnelheid.

MethodeMinimale APIDoel
getActiveNetwork()23Huidig actief netwerk ophalen
getNetworkCapabilities()21Netwerkmogelijkheden ophalen (type, metered, roaming)
registerDefaultNetworkCallback()24Standaardnetwerk monitoren
registerNetworkCallback()21Netwerken monitoren op basis van NetworkRequest-filter
unregisterNetworkCallback()21Registratie van callback annuleren
getActiveNetworkInfo()1Verouderd (deprecated), niet gebruiken

ConnectivityManager in Jetpack Compose

De Jetpack Connectivity-bibliotheek (androidx.core:core-ktx) biedt handige extensies voor het werken met ConnectivityManager in Compose. De functie ConnectivityManager.observeAsState() retourneert State<Boolean> die wordt bijgewerkt bij netwerkwijzigingen. De @Composable NetworkStatus()-component toont de verbindingsstatus en wordt automatisch opnieuw getekend bij wijzigingen. Dit bevrijdt de ontwikkelaar van het handmatig beheren van callbacks en de levenscyclus van Activity/Fragment.

NetworkCallback en het verwerken van netwerkveranderingen

ConnectivityManager.NetworkCallback — is een abstracte klasse met methoden die door het systeem worden aangeroepen bij een verandering van de netwerkstatus. onAvailable(Network) — wordt aangeroepen wanneer het netwerk beschikbaar wordt. De app ontvangt een Network-object dat kan worden gebruikt voor het binden van sockets via Network.bindSocket(). onLost(Network) — wordt aangeroepen wanneer het netwerk niet meer beschikbaar is. De app moet overschakelen naar lokale gegevens of een melding weergeven over het ontbreken van een verbinding. onCapabilitiesChanged(Network, NetworkCapabilities) — wordt aangeroepen bij wijziging van netwerkkenmerken (bijvoorbeeld bij overschakelen van Wi-Fi naar mobiele data).

Correcte verwerking van netwerkveranderingen vereist dat rekening wordt gehouden met de levenscyclus van de component. De callback moet worden geregistreerd in onStart()/onResume() en worden geannuleerd in onStop()/onPause(). Als de callback niet wordt geannuleerd, kan deze worden aangeroepen na vernietiging van de Activity, wat leidt tot geheugenlekken. In Jetpack ViewModel-architectuur wordt aanbevolen lifecycleScope te gebruiken voor het registreren van de callback, zodat deze automatisch wordt geannuleerd bij het opschonen van de ViewModel. Voor services en achtergrondtaken wordt WorkManager gebruikt met NetworkType-beperking.

Omgaan met captive portals — een belangrijke mogelijkheid van ConnectivityManager vanaf Android 10. CAPTIVE_PORTAL — een scenario waarin het Wi-Fi-netwerk beschikbaar is maar authenticatie via een webpagina vereist (luchthavens, hotels, cafés). NetworkCapabilities.NET_CAPABILITY_VALIDATED geeft aan dat het netwerk volledige internettoegang heeft. Als NET_CAPABILITY_VALIDATED ontbreekt, kan de app de browser openen voor authenticatie via de captive portal. Voor het detecteren van een captive portal wordt de methode isCaptivePortal() gebruikt, toegevoegd in Android 11 (API 30).

Netwerk voor specifieke doeleinden (NetworkRequest)

ConnectivityManager maakt het mogelijk om een netwerk voor specifieke doeleinden aan te vragen via requestNetwork() en bindProcessToNetwork(). Een app voor het downloaden van grote bestanden kan bijvoorbeeld een Wi-Fi-netwerk aanvragen, zelfs als het mobiele netwerk actief is. Hiervoor wordt een NetworkRequest gemaakt met addTransportType(TRANSPORT_WIFI) en wanneer Wi-Fi verschijnt, roept het systeem onAvailable() aan. De app bindt sockets aan dit netwerk via network.bindSocket() of OkHttp met een geconfigureerd Network-object. Dit biedt flexibele controle over het gebruik van netwerkinterfaces.

Voorbeeldimplementatie in Kotlin

Laten we een compleet voorbeeld bekijken van het gebruik van ConnectivityManager met de moderne API (NetworkCallback) in Clean Architecture. NetworkMonitor — een wrapper-klasse rond ConnectivityManager die de reactieve netwerkstatus biedt via StateFlow. ViewModel abonneert zich op deze Flow en geeft de status door aan de UI. Repository gebruikt NetworkMonitor om beslissingen te nemen over netwerkverzoeken. Deze benadering zorgt voor testbaarheid en isolatie van platformafhankelijkheden.

Het onderstaande voorbeeld laat zien hoe u ConnectivityManager correct gebruikt met registerDefaultNetworkCallback. De klasse NetworkMonitor encapsuleert het werk met de systeemdienst en biedt een schone Kotlin Flow<Boolean>. Het registreert de callback bij het starten en annuleert deze bij het beëindigen van de levenscyclus. Asynchroon werk wordt verzorgd door coroutines en callbackFlow — een brug tussen de callback-stijl van ConnectivityManager en de reactieve Flow-stijl van 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
        )
    }
}

Gebruik van NetworkMonitor in ViewModel en Repository

ViewModel abonneert zich op NetworkMonitor.isOnline via stateIn() en geeft de status door aan Compose. Repository controleert de huidige waarde van isOnline.value voordat de API wordt aangeroepen: als deze false is — retourneert Flow uit Room. Als deze true is — roept het de API aan, slaat het resultaat op in Room en retourneert Flow uit Room. WorkManager gebruikt NetworkType.CONNECTED voor het beperken van achtergrondtaken. Het testen van NetworkMonitor gebeurt met een mock ConnectivityManager-object en fake NetworkCallback, waardoor elk netwerkscenario in unittesten kan worden geëmuleerd.

Best Practices en veelgemaakte fouten

De eerste regel bij het werken met ConnectivityManager — gebruik geen verouderde API. getActiveNetworkInfo() is deprecated sinds API 29 en kan onjuiste gegevens retourneren op nieuwe Android-versies. Gebruik in plaats daarvan getActiveNetwork() + getNetworkCapabilities() voor eenmalige controles en registerDefaultNetworkCallback() voor continue monitoring. De oude methode maakt geen onderscheid tussen netwerken met een captive portal en volledig internet, wat leidt tot fout-positieve resultaten.

Tweede regel — annuleer altijd de registratie van de callback. Als Activity NetworkCallback registreert in onStart() maar niet annuleert in onStop(), blijft de callback werken na vernietiging van de Activity. Dit veroorzaakt geheugenlekken en een mogelijke NullPointerException wanneer de callback de UI van de vernietigde component probeert bij te werken. Gebruik lifecycleScope of repeatOnLifecycle voor automatisch beheer van de registratie. Gebruik in Jetpack Compose DisposableEffect voor het registreren en annuleren van de callback.

Derde veelgemaakte fout — alleen controleren of er een netwerk is zonder rekening te houden met de kwaliteit ervan. Gewoon "er is internet" is niet voldoende voor het nemen van beslissingen. De app moet NET_CAPABILITY_NOT_METERED controleren voor het downloaden van grote bestanden, NET_CAPABILITY_NOT_ROAMING voor achtergrondsynchronisatie, NET_CAPABILITY_VALIDATED voor bevestiging van internettoegang. Het negeren van deze vlaggen leidt ertoe dat de app video probeert te laden in roaming of gegevens synchroniseert via de captive portal van een hotel.

Vierde — gebruik ConnectivityManager niet voor het controleren van de beschikbaarheid van een specifieke server. ConnectivityManager rapporteert de netwerkstatus op het apparaat, maar garandeert niet dat de server beschikbaar is. Gebruik voor het controleren van de API-beschikbaarheid een HTTP-verzoek met een korte timeout of Health Check. ConnectivityManager + HTTP ping is een betrouwbare combinatie: eerst wordt de aanwezigheid van een netwerk gecontroleerd, vervolgens wordt een licht verzoek naar de server gestuurd om de werkelijke beschikbaarheid te bevestigen.

Testen van ConnectivityManager

Gebruik voor unittesten Robolectric met ShadowConnectivityManager, waarmee de netwerkstatus kan worden geëmuleerd. Voor integratietesten — Android Test Orchestrator met het schakelen van de Vliegtuigmodus. Test de volgende scenario's: overgang van online naar offline, verschijnen van Wi-Fi bij actief mobiel netwerk, verlies van netwerk tijdens een verzoek, captive portal, roaming. Voor mocking in modulaire tests gebruikt u een wrapper-interface (bijv. NetworkMonitorInterface) die kan worden vervangen door een mock-object zonder platformafhankelijkheden.

Veelgestelde vragen

Hoe controleer ik of het apparaat verbonden is met internet?

Moderne methode — gebruik registerDefaultNetworkCallback() met controle van NET_CAPABILITY_INTERNET in onCapabilitiesChanged(). Voor eenmalige controle: connectivityManager.getActiveNetwork()?.let { caps -> caps.hasCapability(NET_CAPABILITY_INTERNET) } ?: false. De verouderde methode getActiveNetworkInfo() wordt niet aanbevolen vanaf API 29+.

Welke machtiging is nodig voor ConnectivityManager?

Voor het lezen van netwerkinformatie is de machtiging android.permission.ACCESS_NETWORK_STATE vereist. Dit is een normale machtiging (normal permission) — deze wordt automatisch verleend bij de installatie van de app en vereist geen runtime-aanvraag. Voor het uitvoeren van netwerkoperaties (HTTP-verzoeken) is ook de INTERNET-machtiging vereist.

Wat is het verschil tussen registerDefaultNetworkCallback en registerNetworkCallback?

registerDefaultNetworkCallback() volgt het standaardnetwerk — het netwerk waarover de app het hoofdverkeer verzendt. registerNetworkCallback(NetworkRequest) volgt netwerken die overeenkomen met het opgegeven filter (bijv. alleen Wi-Fi). De standaard callback is eenvoudiger en dekt 90% van de scenario's, de aangepaste request is voor specifieke vereisten met betrekking tot het netwerktype.

Hoe bepaal ik het netwerktype: Wi-Fi of mobiele data?

Gebruik NetworkCapabilities: caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) voor Wi-Fi, hasTransport(TRANSPORT_CELLULAR) voor mobiele data. Gebruik geen ConnectivityManager.getActiveNetworkInfo().getType() — deze methode is deprecated. NetworkCapabilities is beschikbaar via connectivityManager.getNetworkCapabilities(network).

Waarom is getActiveNetworkInfo() verouderd?

getActiveNetworkInfo() is verouderd vanwege onnauwkeurigheid: het maakt geen onderscheid tussen netwerken met een captive portal en volledig internet, biedt geen informatie over bandbreedte en roaming. Vanaf Android 10 kan deze methode null of onjuiste gegevens retourneren voor multikanaals verbindingen (multi-network). Vervanging — getActiveNetwork() + NetworkCapabilities.

Samenvatting

  • ConnectivityManager — Android-systeemdienst voor netwerkmonitoring, toegankelijk via getSystemService(CONNECTIVITY_SERVICE).
  • Moderne API — registerDefaultNetworkCallback() + NetworkCapabilities, ter vervanging van de verouderde getActiveNetworkInfo() sinds API 29.
  • NetworkCapabilities — klasse voor het controleren van het netwerktype (Wi-Fi, Cellular), metered, roaming en validatie van de internetverbinding.
  • NetworkCallback — reactief monitoringsmechanisme met methoden onAvailable, onLost en onCapabilitiesChanged voor het volgen van netwerkveranderingen.
  • NetworkRequest — filter voor het abonneren op netwerken van een specifiek type, gebruikt met registerNetworkCallback() voor nauwkeurige controle.
  • Machtiging ACCESS_NETWORK_STATE — verplicht voor het werken met ConnectivityManager, automatisch verleend bij installatie van de app.
  • Best Practices — annuleer callbacks in onStop(), controleer NET_CAPABILITY_NOT_METERED en NET_CAPABILITY_VALIDATED, vertrouw niet alleen op de aanwezigheid van een netwerk zonder kwaliteitscontrole.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook