NetworkCallback: Was es ist, Anwendung und Netzwerkverarbeitung in Android

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

NetworkCallback ist eine abstrakte Klasse im Android SDK zur Überwachung von Netzwerkzustandsänderungen über ConnectivityManager. Laut Android Developers Documentation (2025) ermöglicht die Verwendung von NetworkCallback Ihrer App, zeitnah auf Verbindung, Trennung oder Änderungen der Verbindungseigenschaften zu reagieren. ConnectivityManager.NetworkCallback liefert detaillierte Informationen über Netzwerktyp, Captive Portale und Internetverlust, ohne den Systemdienst ständig abfragen zu müssen.

Wichtige Punkte

  • NetworkCallback ist eine integrierte abstrakte Klasse des Android SDK zur Verfolgung des Netzwerkzustands über ConnectivityManager.
  • Die Methode onAvailable wird aufgerufen, wenn das Gerät eine Verbindung zu einem Netzwerk herstellt, und übergibt ein Network-Objekt mit Verbindungsdetails.
  • Die Methode onLost wird ausgelöst, wenn die Netzwerkverbindung verloren geht, und ermöglicht der App, Netzwerkanfragen zu stoppen.
  • Die Methode onCapabilitiesChanged benachrichtigt über Änderungen der Netzwerkfähigkeiten — Internetverfügbarkeit, Captive Portal oder kostenpflichtige Verbindung.
  • Die Registrierung erfolgt über registerNetworkCallback, die Aufhebung über unregisterNetworkCallback im App-Lebenszyklus.

Was ist NetworkCallback?

NetworkCallback ist eine abstrakte Klasse aus dem Paket android.net, die Teil des Android SDK ist. Sie wurde entwickelt, um Benachrichtigungen über Änderungen des Netzwerkverbindungsstatus über den Systemdienst ConnectivityManager zu erhalten.

Vor NetworkCallback verwendeten Entwickler BroadcastReceiver, um Netzwerkänderungen zu verfolgen. Dieser Ansatz erforderte eine ständige Manifest-Registrierung, arbeitete mit Verzögerungen und lieferte keine detaillierten Informationen über Verbindungseigenschaften. Android 5.0 (API 21) führte NetworkCallback als flexiblere und leistungsfähigere Alternative ein.

Der Callback arbeitet asynchron: Die App abonniert Ereignisse über ConnectivityManager, und das System ruft die Callback-Methoden auf, wenn sich der Netzwerkzustand ändert. Dies macht regelmäßiges Polling des Netzwerkstatus überflüssig und spart Batterie- und CPU-Ressourcen.

Wie der Callback in Android funktioniert

ConnectivityManager verwaltet alle Netzwerkschnittstellen des Geräts — Wi-Fi, mobile Daten, Ethernet, VPN. Wenn sich eine dieser Schnittstellen ändert, erstellt das System ein Network-Objekt und übergibt es an die entsprechende Methode des registrierten Callbacks. Jedes Network hat eine eindeutige Kennung, die sich bei einer erneuten Verbindung ändert.

Der Callback ist nicht an einen bestimmten Netzwerktyp gebunden — er kann alle verfügbaren Schnittstellen gleichzeitig verfolgen. Zum Filtern von Verbindungstypen wird die Klasse NetworkRequest verwendet, die die erforderlichen Transportprotokolle (Wi-Fi, Mobilfunkdaten, Ethernet) und Netzwerkfähigkeiten angibt.

So registrieren Sie NetworkCallback in Ihrer App

Die NetworkCallback-Registrierung erfolgt über die Methode ConnectivityManager.registerNetworkCallback. Der erste Parameter ist ein NetworkRequest.Builder, der die Netzwerkanforderungen beschreibt, der zweite eine Callback-Instanz. Die Berechtigung ACCESS_NETWORK_STATE ist im Manifest erforderlich.

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

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

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

Registrierung in Activity und Fragment

Es wird empfohlen, NetworkCallback zu registrieren, wenn die App im Vordergrund ist, und sie aufzuheben, wenn sie in den Hintergrund geht. In Activity verwenden Sie onStart und onStop zur Verwaltung des Callback-Lebenszyklus. In Fragment verwenden Sie onResume und onPause.

Zur Vereinfachung der Registrierungsverwaltung können Sie Lifecycle-aware-Komponenten verwenden. Die Bibliothek AndroidX Lifecycle ermöglicht die Erstellung eines benutzerdefinierten LifecycleObservers, der den Callback automatisch registriert und aufhebt, wenn sich der Lebenszyklusstatus ändert.

Registrierung in einem Service

Für Hintergrundaufgaben erfolgt die Registrierung in einem Service oder WorkManager. Beachten Sie, dass Hintergrunddienste unter Android 8+ Startbeschränkungen haben. WorkManager mit NetworkType ist eine zuverlässigere Möglichkeit, Aufgaben unter einem bestimmten Netzwerkzustand auszuführen, da er mit der Kompatibilitäts-API integriert ist und den Doze-Modus berücksichtigt.

Wichtige NetworkCallback-Methoden

NetworkCallback bietet eine Reihe von Methoden, die bei Änderung des Netzwerkzustands aufgerufen werden. Nicht alle Methoden müssen überschrieben werden — implementieren Sie nur die, die für Ihre spezifische App-Aufgabe erforderlich sind. onAvailable und onLost sind das Minimum für die grundlegende Verbindungsüberwachung.

MethodeWann aufgerufenParameter
onAvailableNetzwerk ist verfügbarNetwork — Netzwerkobjekt
onLostNetzwerk verloren oder getrenntNetwork — Netzwerkobjekt
onCapabilitiesChangedNetzwerkfähigkeiten geändertNetwork, NetworkCapabilities
onBlockedStatusChangedBlockierstatus geändertNetwork, Boolean
onNetworkSuspendedNetzwerk vom System ausgesetztNetwork
onNetworkResumedNetzwerk nach Aussetzung fortgesetztNetwork

Methode onCapabilitiesChanged

Diese Methode ist der Schlüssel zum Erhalten detaillierter Netzwerkinformationen. Der Parameter NetworkCapabilities enthält Flags: NET_CAPABILITY_INTERNET — Internetzugang verfügbar, NET_CAPABILITY_NOT_METERED — unbegrenzte Verbindung, NET_CAPABILITY_NOT_ROAMING — kein Roaming. Auch Signallatenz und Bandbreite sind abrufbar.

Captive Portale sind ein Sonderfall: Bei der Verbindung mit einem öffentlichen Wi-Fi-Netzwerk über ein Portal zeigt die Methode onCapabilitiesChanged nicht sofort INTERNET an. Das Netzwerk ist zunächst verfügbar, aber ohne Internet — eine Autorisierung über den Browser ist erforderlich. Entwickler müssen diese Verzögerung in der App-Logik berücksichtigen.

Methode onBlockedStatusChanged

Wird aufgerufen, wenn das System den Netzwerkverkehr für die App blockiert — zum Beispiel bei Aktivierung des Datensparmodus oder Einschränkung von Hintergrunddaten. onBlockedStatusChanged teilt der App mit, dass ihre Netzwerkanfragen vorübergehend verboten sind, und wechselt zur lokalen Verarbeitung.

NetworkCallback-Implementierungsbeispiele

Betrachten wir eine praktische NetworkCallback-Implementierung zur Überwachung des Internetzugangs und zur Behandlung von Captive Portalen. Das folgende Beispiel zeigt die Überprüfung von NET_CAPABILITY_INTERNET und die Validierung der Verbindung über eine HTTP-Anfrage an den 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", "Mobile data connected")
            hasInternet ->
                Log.d("Network", "Wi-Fi connected")
            else ->
                Log.d("Network", "No internet access")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Connection lost: ${network}")
        // Netzwerkanfragen stoppen
    }
}

Behandlung von Captive Portalen

Bei der Verbindung mit einem öffentlichen Netzwerk mit Autorisierung (Café, Flughafen) meldet das System zunächst onAvailable, aber onCapabilitiesChanged zeigt möglicherweise kein INTERNET an. In solchen Fällen ist eine zusätzliche Überprüfung über eine HTTP-Anfrage an einen stabilen Endpunkt wie https://www.google.com/generate_204 erforderlich.

Wenn die Anfrage den Code 204 zurückgibt — ist Internet verfügbar. Bei einer Weiterleitung (301, 302, 307) — ist Browser-Autorisierung erforderlich. In diesem Fall können Sie ein WebView oder Intent mit der Weiterleitungs-URL öffnen, um die Portal-Authentifizierung abzuschließen.

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", "Internet is available")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Captive portal detected")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Validation failed: ${e.message}")
        }
    }
}

Unterschiede zu anderen Netzwerküberwachungsmethoden

Vor NetworkCallback war die primäre Methode zur Netzwerküberwachung BroadcastReceiver mit dem Filter android.net.conn.CONNECTIVITY_CHANGE. Dieser Ansatz hatte erhebliche Nachteile: Verzögerungen von mehreren Sekunden, fehlende Informationen über den Schnittstellentyp und erhöhter Stromverbrauch durch ständiges Aufwecken des Geräts.

Eine moderne Alternative ist LiveData oder StateFlow in Kombination mit NetworkCallback. Das Muster besteht darin, den Callback in einen reaktiven Stream zu verpacken, der die UI automatisch über Zustandsänderungen benachrichtigt. Beispielsweise wird ein MutableStateFlow mit dem Typ NetworkStatus innerhalb der Callback-Methoden aktualisiert, und ein ViewCollector abonniert die Änderungen.

MethodeAPI LevelLatenzDetailgradStromverbrauch
BroadcastReceiver1+hochniedrighoch
NetworkCallback21+niedrighochniedrig
ConnectivityManager.getActiveNetwork23+sofortmittelkeiner
NWPathMonitor (iOS)iOS 12+niedrighochniedrig

Arbeit im Hintergrundmodus

Ab Android 10 sind die Hintergrundbeschränkungen strenger, und NetworkCallback wird möglicherweise nicht aufgerufen, wenn die App im Hintergrund ist. Für kritische Aufgaben — wie Daten laden, wenn das Netzwerk verfügbar wird — verwenden Sie WorkManager mit der Einschränkung NetworkType.CONNECTED. WorkManager garantiert die Aufgabenausführung bei Erfüllung der Netzwerkbedingungen.

In Android 12+ gibt es eine Einschränkung für die Manifest-Registrierung von BroadcastReceiver für CONNECTIVITY_ACTION. Entwickler müssen auf NetworkCallback migrieren oder WorkManager verwenden. Die Google Play-Richtlinie verlangt seit August 2022 die Entfernung der Manifest-Registrierung für diese Aktion.

Häufig gestellte Fragen

Was ist der Unterschied zwischen NetworkCallback und BroadcastReceiver für das Netzwerk?

BroadcastReceiver mit CONNECTIVITY_CHANGE liefert nur die Tatsache der Netzwerkänderung ohne Details und mit einer Verzögerung von bis zu mehreren Sekunden. NetworkCallback arbeitet asynchron, liefert ein Network-Objekt, Schnittstellentyp und Verbindungsfähigkeiten und benötigt keine Manifest-Registrierung, die unter Android 12+ verboten ist.

Kann NetworkCallback im Hintergrund verwendet werden?

Unter Android 10+ können Hintergrundbeschränkungen den Aufruf von NetworkCallback verzögern oder verhindern. Für Hintergrundaufgaben verwenden Sie WorkManager mit NetworkType-Einschränkung — er garantiert die Aufgabenausführung bei Erfüllung der Bedingungen, unabhängig vom Energiesparmodus.

Wie hebt man die Registrierung von NetworkCallback auf?

Rufen Sie die Methode unregisterNetworkCallback bei ConnectivityManager auf und übergeben Sie dieselbe Callback-Instanz, die Sie bei der Registrierung verwendet haben. Ein nicht aufgehobener Callback kann zu Speicherlecks führen, da das System eine Referenz darauf behält. Heben Sie die Registrierung immer in onStop oder onDestroy auf.

Welche Android-Version ist mindestens für NetworkCallback erforderlich?

NetworkCallback ist ab API Level 21 (Android 5.0 Lollipop) verfügbar. Für Geräte mit älteren Versionen verwenden Sie BroadcastReceiver oder Kompatibilitätsbibliotheken wie AndroidX Activity NetworkCallback, die die API für breitere Unterstützung kapseln.

Wie überprüft man den aktuellen Netzwerkstatus ohne Callback?

Verwenden Sie ConnectivityManager.getActiveNetwork (API 23+) zusammen mit getNetworkCapabilities. Die Methode gibt das aktuelle aktive Netzwerk synchron zurück, ohne Änderungen zu abonnieren. Für API 21-22 verwenden Sie getActiveNetworkInfo, das in neueren Versionen als veraltet markiert ist.

Zusammenfassung

  • NetworkCallback ist eine abstrakte Klasse des Android SDK zur asynchronen Netzwerküberwachung über ConnectivityManager ohne ständiges Polling.
  • Die Methode onAvailable benachrichtigt über Netzwerkverbindung, onLost über Verbindungsverlust, onCapabilitiesChanged über Änderungen der Netzwerkfähigkeiten.
  • Die Registrierung erfolgt über registerNetworkCallback mit einem NetworkRequest und einer Callback-Instanz.
  • Der Lebenszyklus erfordert die Aufhebung der Registrierung in onStop für Activity und onPause für Fragment.
  • Captive Portale werden über eine zusätzliche HTTP-Anfrage an generate_204 behandelt, um den tatsächlichen Internetzugang zu überprüfen.
  • NetworkCallback hat BroadcastReceiver für CONNECTIVITY_ACTION ersetzt, der im Manifest unter Android 12+ verboten ist.
  • Für Hintergrundaufgaben verwenden Sie WorkManager mit NetworkType.CONNECTED anstelle der direkten NetworkCallback-Registrierung.

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