Connectivity Manager: Was es ist, Methoden und Verbindungsüberwachung

Autor: IT Sectr Veröffentlicht: 2026-03-10 Lesezeit: 9 Min.

Connectivity Manager ist ein Android-Systemdienst, der Anwendungen Informationen über den Netzwerkverbindungsstatus des Geräts bereitstellt. Er ermöglicht die Überprüfung der Internetverfügbarkeit, die Bestimmung des Netzwerktyps (Wi-Fi, mobile Daten, Ethernet), die Verfolgung von Verbindungsänderungen und die Verwaltung von Netzwerkanfragen basierend auf der Verbindungsqualität. Laut Android Developers, 2025 ist ConnectivityManager die wichtigste API für die Netzwerküberwachung und seit API Level 1 Teil des Android Frameworks.

Wichtigste Punkte

  • Connectivity Manager — ein Android-Systemdienst zur Überwachung der Netzwerkverbindung des Geräts.
  • NetworkCallback — der primäre Mechanismus zur Verfolgung von Netzwerkänderungen durch Callback-Registrierung.
  • NetworkCapabilities — eine Klasse, die detaillierte Informationen über die Fähigkeiten des aktuellen Netzwerks (Wi-Fi, mobile Daten, VPN, Ethernet) bereitstellt.
  • NetworkRequest — ein Filter zum Abonnieren bestimmter Netzwerktypen mit definierten Eigenschaften.
  • getActiveNetworkInfo() — eine veraltete Methode (seit API 29 deprecated), ersetzt durch NetworkCallback und registerDefaultNetworkCallback.

Was ist Connectivity Manager?

ConnectivityManager ist ein Systemdienst des Android-Betriebssystems, der über Context.getSystemService(Context.CONNECTIVITY_SERVICE) zugänglich ist. Er bietet eine API zum Abrufen von Informationen über die Netzwerkverbindung des Geräts, zur Überwachung von Netzwerkänderungen und zur Verwaltung der Netzwerkanfragen der Anwendung. Connectivity Manager ist seit der ersten Plattformversion (API Level 1) Teil des Android Frameworks und hat im Laufe der Jahrzehnte bedeutende Veränderungen durchgemacht: vom einfachen getActiveNetworkInfo() bis zum modernen reaktiven Modell mit NetworkCallback und NetworkRequest.

Zu den Hauptfunktionen von Connectivity Manager gehören: Überprüfung einer aktiven Netzwerkverbindung, Bestimmung des Netzwerktyps (Wi-Fi, mobile Daten, Ethernet, Bluetooth, VPN), Echtzeit-Überwachung von Netzwerkzustandsänderungen, Abruf von Informationen über Bandbreite und Latenz sowie Verwaltung der Netzwerkanfragen der Anwendung. ConnectivityManager wird zusammen mit WorkManager und Repository verwendet, um eine Offline-First-Architektur, adaptives Laden von Inhalten und eine Optimierung der Anwendung basierend auf der Verbindungsqualität zu implementieren.

Ab Android 10 (API 29) hat Google den Ansatz für die Arbeit mit ConnectivityManager geändert. Die Methode getActiveNetworkInfo() wurde als veraltet erklärt, stattdessen wird die Verwendung von registerDefaultNetworkCallback() oder registerNetworkCallback() mit NetworkRequest empfohlen. Die neue API bietet detailliertere Netzwerkinformationen, einschließlich der Erkennung von Captive Portals (Wi-Fi mit Authentifizierung) und der Bewertung der Verbindungsqualität. ConnectivityManager ist auch in die Jetpack-Familie integriert: Die ConnectivityManager-Bibliothek wurde 2024 als Teil von Jetpack veröffentlicht, um die Netzwerküberwachung in Compose-Anwendungen zu vereinfachen.

Die Rolle von Connectivity Manager in der Anwendungsarchitektur

In der modernen Android-Architektur wird ConnectivityManager auf Repository- oder UseCase-Ebene verwendet, um Entscheidungen über Netzwerkanfragen zu treffen. Die Repository-Schicht überprüft den Netzwerkstatus vor dem API-Aufruf: Ist das Netzwerk nicht verfügbar, werden Daten aus dem lokalen Speicher (Room) zurückgegeben. Ist das Netzwerk verfügbar, wird eine Anfrage an den Server gestellt und das Ergebnis in Room gespeichert. Das ViewModel abonniert einen Flow aus Room und kennt die Details der Netzwerkinteraktion nicht — dies ermöglicht das unabhängige Testen jeder Schicht.

Wie Connectivity Manager funktioniert

Connectivity Manager bezieht Netzwerkzustandsinformationen vom connectivity-Systemdienst, der mit den Netzwerkschnittstellen des Linux-Kernels interagiert. Wenn das Gerät eine Wi-Fi-Verbindung herstellt oder mobile Daten aktiviert, benachrichtigt der Kernel den Systemdienst, der seinen internen Zustand aktualisiert und alle registrierten Callbacks benachrichtigt. Die Architektur von ConnectivityManager basiert auf dem Observer-Muster: Die Anwendung registriert einen NetworkCallback und erhält Benachrichtigungen über alle Netzwerkänderungen — Verbindungsaufbau, Verbindungsverlust, Netzwerktypwechsel oder Qualitätsverschlechterung.

Die moderne ConnectivityManager-API verwendet NetworkRequest zum Filtern von Netzwerkereignissen. NetworkRequest ermöglicht die Angabe von Anforderungen an das Netzwerk: Transport (Transport.WIFI, Transport.CELLULAR, Transport.ETHERNET), Internetfähigkeit (NetworkCapabilities.NET_CAPABILITY_INTERNET) und andere Kriterien. Wenn eine Anwendung nur Wi-Fi zum Herunterladen großer Dateien benötigt, erstellt sie einen NetworkRequest mit Transport.WIFI und registriert einen Callback. Das System benachrichtigt die Anwendung nur bei Änderungen der Wi-Fi-Verbindung und ignoriert mobile Netzwerkereignisse.

Eine wichtige Funktion von Connectivity Manager unter Android 12+ ist fähigkeitsbasiertes Networking. Die Anwendung prüft nicht nur „Gibt es Internet?“, sondern kann bewerten, welche Art von Verkehr verfügbar ist. NET_CAPABILITY_NOT_METERED zeigt beispielsweise eine unbegrenzte Verbindung (Wi-Fi) an, NET_CAPABILITY_NOT_ROAMING zeigt an, dass sich das Gerät nicht im Roaming befindet. Dies ermöglicht Entscheidungen: Video nur über Wi-Fi herunterladen, Synchronisierung im Roaming verschieben oder mobile Daten nur für kritische Anfragen verwenden.

API LevelEmpfohlene MethodeStatus
1-22getActiveNetworkInfo()Veraltet
21+NetworkCallback + registerNetworkCallback()Empfohlen
24+registerDefaultNetworkCallback()Empfohlen
28+getActiveNetwork() + NetworkCapabilitiesAlternative
31+registerBestMatchingNetworkCallback()Neue API

Berechtigungen für Connectivity Manager

Für die Verwendung von Connectivity Manager in einer Android-Anwendung sind Berechtigungen erforderlich. ACCESS_NETWORK_STATE ist eine obligatorische Berechtigung zum Lesen von Netzwerkinformationen, die in der AndroidManifest.xml deklariert wird. Ohne diese Berechtigung gibt ConnectivityManager für getActiveNetwork() null zurück und ruft keine Callbacks auf. Für Netzwerkoperationen ist auch die INTERNET-Berechtigung erforderlich. Ab Android 10 (API 29) kann die Anwendung den Netzwerkstatus ohne zusätzliche Laufzeitberechtigungen überprüfen — ACCESS_NETWORK_STATE ist eine normale Berechtigung und wird bei der Installation automatisch erteilt.

Hauptmethoden von Connectivity Manager

Der moderne Connectivity Manager bietet mehrere wichtige Methoden für die Arbeit mit dem Netzwerk. getActiveNetwork() (API 23+) gibt das Network-Objekt des aktuell aktiven Netzwerks zurück oder null, wenn das Gerät nicht verbunden ist. Diese Methode benötigt keine Callbacks und eignet sich für einmalige Überprüfungen. Das Network-Objekt kann an NetworkCapabilities übergeben werden, um detaillierte Informationen zu erhalten: Transporttyp, Metered-Status, Roaming, Internetfähigkeit und andere Eigenschaften.

registerDefaultNetworkCallback() (API 24+) ist die bevorzugte Methode zur Netzwerküberwachung. Die Anwendung registriert einen Callback, der bei Änderungen des Standardnetzwerks (dem Netzwerk, über das die Anwendung Traffic sendet) aufgerufen wird. Der Callback erhält ein Network-Objekt, das zum Binden von Sockets und HTTP-Clients verwendet werden kann. Diese Methode ersetzt das veraltete getActiveNetworkInfo() und bietet reaktive Netzwerküberwachung ohne Polling.

registerNetworkCallback() (API 21+) ermöglicht das Abonnieren von Änderungen eines bestimmten Netzwerktyps über NetworkRequest. Eine Anwendung kann beispielsweise nur Wi-Fi-Netzwerke mit new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build() verfolgen. Das System benachrichtigt die Anwendung über Wi-Fi-Verbindung/Trennung, ohne mobile Netzwerkereignisse zu beeinflussen. NetworkCapabilities.getLinkDownstreamBandwidthKbps() gibt eine Schätzung der Downstream-Bandbreite in kbit/s zurück und ermöglicht die Anpassung der Inhaltsqualität an die Verbindungsgeschwindigkeit.

MethodeMinimales APIZweck
getActiveNetwork()23Aktuelles aktives Netzwerk abrufen
getNetworkCapabilities()21Netzwerkfähigkeiten abrufen (Typ, Metered, Roaming)
registerDefaultNetworkCallback()24Standardnetzwerk überwachen
registerNetworkCallback()21Netzwerke nach NetworkRequest-Filter überwachen
unregisterNetworkCallback()21Callback-Registrierung aufheben
getActiveNetworkInfo()1Veraltet, nicht verwenden

ConnectivityManager in Jetpack Compose

Die Jetpack Connectivity-Bibliothek (androidx.core:core-ktx) bietet praktische Erweiterungen für die Arbeit mit ConnectivityManager in Compose. Die Funktion ConnectivityManager.observeAsState() gibt einen State zurück, der bei Netzwerkänderungen aktualisiert wird. Die @Composable NetworkStatus()-Komponente zeigt den Verbindungsstatus an und wird bei Änderungen automatisch neu gezeichnet. Dies erspart dem Entwickler die manuelle Verwaltung von Callbacks und des Activity/Fragment-Lebenszyklus.

NetworkCallback und Behandlung von Netzwerkänderungen

ConnectivityManager.NetworkCallback ist eine abstrakte Klasse mit Methoden, die vom System bei Änderungen des Netzwerkzustands aufgerufen werden. onAvailable(Network) wird aufgerufen, wenn ein Netzwerk verfügbar wird. Die Anwendung erhält ein Network-Objekt, das zum Binden von Sockets über Network.bindSocket() verwendet werden kann. onLost(Network) wird aufgerufen, wenn ein Netzwerk nicht mehr verfügbar ist. Die Anwendung sollte auf lokale Daten umschalten oder eine Meldung über fehlende Verbindung anzeigen. onCapabilitiesChanged(Network, NetworkCapabilities) wird bei Änderung der Netzwerkeigenschaften aufgerufen (z. B. beim Wechsel von Wi-Fi zu mobilen Daten).

Die korrekte Behandlung von Netzwerkänderungen erfordert die Berücksichtigung des Komponentenlebenszyklus. Der Callback muss registriert werden in onStart()/onResume() und in onStop()/onPause() aufgehoben werden. Wird der Callback nicht aufgehoben, kann er nach der Zerstörung der Activity weiterlaufen, was zu Speicherlecks und potenziellen NullPointerException führt, wenn der Callback versucht, die UI einer zerstörten Komponente zu aktualisieren. Verwenden Sie lifecycleScope oder repeatOnLifecycle für die automatische Registrierungsverwaltung. Verwenden Sie in Jetpack Compose DisposableEffect zum Registrieren und Aufheben des Callbacks.

Behandlung von Captive Portals ist eine wichtige Funktion von ConnectivityManager ab Android 10. CAPTIVE_PORTAL ist ein Szenario, bei dem ein Wi-Fi-Netzwerk verfügbar ist, aber eine Authentifizierung über eine Webseite erfordert (Flughäfen, Hotels, Cafés). NetworkCapabilities.NET_CAPABILITY_VALIDATED zeigt an, dass das Netzwerk vollen Internetzugang hat. Fehlt NET_CAPABILITY_VALIDATED, kann die Anwendung einen Browser für die Captive-Portal-Authentifizierung öffnen. Die in Android 11 (API 30) hinzugefügte Methode isCaptivePortal() wird zur Erkennung von Captive Portals verwendet.

Netzwerk für spezifische Zwecke (NetworkRequest)

ConnectivityManager ermöglicht die Anforderung eines Netzwerks für bestimmte Zwecke über requestNetwork() und bindProcessToNetwork(). Eine Anwendung zum Herunterladen großer Dateien kann beispielsweise ein Wi-Fi-Netzwerk anfordern, auch wenn mobile Daten aktiv sind. Dazu wird ein NetworkRequest mit addTransportType(TRANSPORT_WIFI) erstellt, und wenn Wi-Fi verfügbar ist, ruft das System onAvailable() auf. Die Anwendung bindet Sockets über network.bindSocket() oder OkHttp mit einem konfigurierten Network-Objekt an dieses Netzwerk. Dies bietet flexible Kontrolle über die Nutzung von Netzwerkschnittstellen.

Implementierungsbeispiel in Kotlin

Betrachten wir ein vollständiges Beispiel der Verwendung von ConnectivityManager mit der modernen API (NetworkCallback) in Clean Architecture. NetworkMonitor ist eine Wrapper-Klasse um ConnectivityManager, die den Netzwerkstatus reaktiv über StateFlow bereitstellt. Das ViewModel abonniert diesen Flow und leitet den Status an die UI weiter. Das Repository verwendet NetworkMonitor, um Entscheidungen über Netzwerkanfragen zu treffen. Dieser Ansatz gewährleistet Testbarkeit und Isolation von Plattformabhängigkeiten.

Das folgende Beispiel zeigt, wie ConnectivityManager mit registerDefaultNetworkCallback korrekt verwendet wird. Die Klasse NetworkMonitor kapselt die Arbeit mit dem Systemdienst und stellt einen sauberen Kotlin Flow bereit. Sie registriert den Callback beim Start und hebt ihn am Ende des Lebenszyklus auf. Asynchroner Betrieb wird durch Koroutinen und callbackFlow gewährleistet — eine Brücke zwischen dem Callback-Stil von ConnectivityManager und dem reaktiven Flow-Stil von 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
        )
    }
}

Verwendung von NetworkMonitor in ViewModel und Repository

Das ViewModel abonniert NetworkMonitor.isOnline über stateIn() und leitet den Status an Compose weiter. Das Repository prüft den aktuellen isOnline.value vor dem API-Aufruf: bei false — gibt es einen Flow aus Room zurück. Bei true — ruft es die API auf, speichert das Ergebnis in Room und gibt einen Flow aus Room zurück. WorkManager verwendet NetworkType.CONNECTED, um Hintergrundaufgaben einzuschränken. Das Testen von NetworkMonitor erfolgt mit einem Mock-Objekt von ConnectivityManager und einem gefälschten NetworkCallback, wodurch jedes Netzwerkszenario in Unit-Tests emuliert werden kann.

Best Practices und häufige Fehler

Die erste Regel bei der Arbeit mit ConnectivityManager ist, keine veraltete API zu verwenden. getActiveNetworkInfo() ist seit API 29 veraltet und kann auf neueren Android-Versionen falsche Daten zurückgeben. Verwenden Sie stattdessen getActiveNetwork() + getNetworkCapabilities() für einmalige Überprüfungen und registerDefaultNetworkCallback() für kontinuierliche Überwachung. Die alte Methode unterscheidet auch nicht zwischen Netzwerken mit Captive Portal und vollem Internetzugang, was zu Fehlalarmen führt.

Die zweite Regel ist, den Callback immer abzumelden. Wenn eine Activity einen NetworkCallback in onStart() registriert, aber nicht in onStop() abmeldet, läuft der Callback nach der Zerstörung der Activity weiter. Dies verursacht Speicherlecks und potenzielle NullPointerException, wenn der Callback versucht, die UI einer zerstörten Komponente zu aktualisieren. Verwenden Sie lifecycleScope oder repeatOnLifecycle für die automatische Registrierungsverwaltung. Verwenden Sie in Jetpack Compose DisposableEffect zum Registrieren und Abmelden des Callbacks.

Der dritte häufige Fehler ist die Überprüfung nur der Netzwerkverfügbarkeit ohne Berücksichtigung der Qualität. Ein einfaches „Gibt es Internet?“ reicht für Entscheidungen nicht aus. Die Anwendung sollte NET_CAPABILITY_NOT_METERED für große Downloads, NET_CAPABILITY_NOT_ROAMING für Hintergrundsynchronisation und NET_CAPABILITY_VALIDATED zur Bestätigung des Internetzugangs prüfen. Das Ignorieren dieser Flags führt dazu, dass die Anwendung versucht, Videos im Roaming herunterzuladen oder Daten über ein Hotel-Captive-Portal zu synchronisieren.

Die vierte Regel ist, ConnectivityManager nicht zur Überprüfung der Verfügbarkeit eines bestimmten Servers zu verwenden. ConnectivityManager meldet den Netzwerkstatus auf dem Gerät, garantiert aber nicht, dass der Server erreichbar ist. Verwenden Sie für die Überprüfung der API-Verfügbarkeit eine HTTP-Anfrage mit kurzem Timeout oder einen Health Check. ConnectivityManager + HTTP-Ping ist eine zuverlässige Kombination: Zuerst die Netzwerkverfügbarkeit prüfen, dann eine leichte Anfrage an den Server senden, um die tatsächliche Erreichbarkeit zu bestätigen.

Testen von ConnectivityManager

Verwenden Sie für Unit-Tests Robolectric mit ShadowConnectivityManager, der Netzwerkzustände emulieren kann. Für Integrationstests — Android Test Orchestrator mit Flugmodus-Umschaltung. Testen Sie Szenarien: Übergang von Online zu Offline, Auftreten von Wi-Fi bei aktiven mobilen Daten, Netzwerkverlust während einer Anfrage, Captive Portal, Roaming. Verwenden Sie für Mocking in Unit-Tests eine Wrapper-Schnittstelle (z. B. NetworkMonitorInterface), die ohne Plattformabhängigkeiten durch ein Mock-Objekt ersetzt werden kann.

Häufig gestellte Fragen

Wie überprüfe ich, ob das Gerät mit dem Internet verbunden ist?

Die moderne Methode ist die Verwendung von registerDefaultNetworkCallback() mit NET_CAPABILITY_INTERNET-Prüfung in onCapabilitiesChanged(). Für eine einmalige Prüfung: connectivityManager.getActiveNetwork()?.let { caps -> caps.hasCapability(NET_CAPABILITY_INTERNET) } ?: false. Die veraltete Methode getActiveNetworkInfo() wird ab API 29+ nicht empfohlen.

Welche Berechtigung wird für ConnectivityManager benötigt?

Zum Lesen von Netzwerkinformationen ist die Berechtigung android.permission.ACCESS_NETWORK_STATE erforderlich. Dies ist eine normale Berechtigung — sie wird bei der Installation der Anwendung automatisch erteilt und erfordert keine Laufzeitanfrage. Für Netzwerkoperationen (HTTP-Anfragen) ist auch die INTERNET-Berechtigung erforderlich.

Was ist der Unterschied zwischen registerDefaultNetworkCallback und registerNetworkCallback?

registerDefaultNetworkCallback() überwacht das Standardnetzwerk — das Netzwerk, über das die Anwendung ihren Hauptverkehr sendet. registerNetworkCallback(NetworkRequest) überwacht Netzwerke, die einem bestimmten Filter entsprechen (z. B. nur Wi-Fi). Der Standard-Callback ist einfacher und deckt 90% der Szenarien ab, während eine benutzerdefinierte Anfrage für spezifische Netzwerktypanforderungen gedacht ist.

Wie bestimme ich den Netzwerktyp: Wi-Fi oder mobile Daten?

Verwenden Sie NetworkCapabilities: caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) für Wi-Fi, hasTransport(TRANSPORT_CELLULAR) für mobile Daten. Verwenden Sie nicht ConnectivityManager.getActiveNetworkInfo().getType() — diese Methode ist veraltet. NetworkCapabilities ist über connectivityManager.getNetworkCapabilities(network) verfügbar.

Warum ist getActiveNetworkInfo() veraltet?

getActiveNetworkInfo() ist aufgrund von Ungenauigkeit veraltet: Es unterscheidet nicht zwischen Netzwerken mit Captive Portal und vollem Internetzugang und liefert keine Informationen über Bandbreite oder Roaming. Ab Android 10 kann diese Methode null oder falsche Daten für Multi-Netzwerk-Verbindungen zurückgeben. Die Alternative ist getActiveNetwork() + NetworkCapabilities.

Zusammenfassung

  • ConnectivityManager — ein Android-Systemdienst zur Überwachung der Netzwerkkonnektivität, zugänglich über getSystemService(CONNECTIVITY_SERVICE).
  • Moderne API — registerDefaultNetworkCallback() + NetworkCapabilities, ersetzt das veraltete getActiveNetworkInfo() seit API 29.
  • NetworkCapabilities — eine Klasse zur Überprüfung des Netzwerktyps (Wi-Fi, Cellular), Metering, Roaming und Internetverbindungsvalidierung.
  • NetworkCallback — ein reaktiver Überwachungsmechanismus mit den Methoden onAvailable, onLost und onCapabilitiesChanged zur Verfolgung von Netzwerkänderungen.
  • NetworkRequest — ein Filter zum Abonnieren von Netzwerken eines bestimmten Typs, verwendet mit registerNetworkCallback() für präzise Steuerung.
  • ACCESS_NETWORK_STATE-Berechtigung — obligatorisch für die Arbeit mit ConnectivityManager, wird bei der Installation automatisch erteilt.
  • Best Practices — Callbacks in onStop() abmelden, NET_CAPABILITY_NOT_METERED und NET_CAPABILITY_VALIDATED prüfen, sich nicht nur auf die Netzwerkpräsenz ohne Qualitätsprüfung verlassen.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch