NetworkCallback: nedir, uygulaması ve Android'de ağ yönetimi

Yazar: IT Sectr Yayınlanma: 2026-03-10 Okuma süresi: 9 dk

NetworkCallback, ConnectivityManager aracılığıyla ağ durumu değişikliklerini izlemek için Android SDK'daki soyut bir sınıftır. Android Developers Documentation (2025)'a göre, NetworkCallback kullanımı uygulamanızın bağlantı, bağlantı kesme veya bağlantı özelliklerindeki değişikliklere zamanında yanıt vermesini sağlar. ConnectivityManager.NetworkCallback, sistem hizmetini sürekli yoklamadan ağ türü, kablolu portallar ve internet kaybı hakkında ayrıntılı bilgi sağlar.

Önemli Noktalar

  • NetworkCallback, ConnectivityManager aracılığıyla ağ durumunu izlemek için Android SDK'da yerleşik soyut bir sınıftır.
  • onAvailable metodu, cihaz bir ağa bağlandığında çağrılır ve bağlantı ayrıntılarıyla birlikte bir Network nesnesi iletir.
  • onLost metodu, ağ bağlantısı kesildiğinde tetiklenir ve uygulamanın ağ isteklerini durdurmasına olanak tanır.
  • onCapabilitiesChanged metodu, ağ yeteneklerindeki değişiklikleri (internet kullanılabilirliği, kablolu portal veya ücretli bağlantı) bildirir.
  • Kayıt, registerNetworkCallback aracılığıyla yapılır, iptal ise uygulama yaşam döngüsünde unregisterNetworkCallback ile yapılır.

NetworkCallback Nedir?

NetworkCallback, android.net paketinden gelen ve Android SDK'nın bir parçası olan soyut bir sınıftır. ConnectivityManager sistem hizmeti aracılığıyla ağ bağlantı durumu değişiklikleri hakkında bildirim almak üzere tasarlanmıştır.

NetworkCallback'ten önce, geliştiriciler ağ değişikliklerini izlemek için BroadcastReceiver kullanıyordu. Bu yaklaşım, manifest dosyasında sürekli kayıt gerektiriyor, gecikmeli çalışıyor ve bağlantı özellikleri hakkında ayrıntılı bilgi sağlamıyordu. Android 5.0 (API 21), NetworkCallback'i daha esnek ve performanslı bir alternatif olarak tanıttı.

Geri çağırma asenkron çalışır: uygulama ConnectivityManager aracılığıyla olaylara abone olur ve ağ durumu değiştiğinde sistem geri çağırma metotlarını çağırır. Bu, ağ durumunun periyodik olarak yoklanması ihtiyacını ortadan kaldırarak pil ve CPU kaynaklarından tasarruf sağlar.

Android'de geri çağırma nasıl çalışır

ConnectivityManager, cihazdaki tüm ağ arayüzlerini (Wi-Fi, mobil veri, Ethernet, VPN) yönetir. Bu arayüzlerden herhangi biri değiştiğinde, sistem bir Network nesnesi oluşturur ve bunu kayıtlı geri çağırmanın ilgili metoduna iletir. Her Network, yeniden bağlanmada değişen benzersiz bir tanımlayıcıya sahiptir.

Geri çağırma belirli bir ağ türüne bağlı değildir — tüm kullanılabilir arayüzleri aynı anda izleyebilir. Bağlantı türlerini filtrelemek için, gerekli taşıma protokollerini (Wi-Fi, hücresel veri, Ethernet) ve ağ yeteneklerini belirten NetworkRequest sınıfı kullanılır.

Uygulamanızda NetworkCallback Nasıl Kaydedilir

NetworkCallback kaydı, ConnectivityManager.registerNetworkCallback metodu aracılığıyla yapılır. İlk parametre, ağ gereksinimlerini tanımlayan bir NetworkRequest.Builder, ikincisi bir geri çağırma örneğidir. Manifest'te ACCESS_NETWORK_STATE izni gereklidir.

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)
    }
}

Activity ve Fragment'te Kayıt

NetworkCallback'in uygulama ön plandayken kaydedilmesi ve arka plana geçerken iptal edilmesi önerilir. Activity'de, geri çağırma yaşam döngüsünü yönetmek için onStart ve onStop kullanın. Fragment'te, onResume ve onPause kullanın.

Kayıt yönetimini basitleştirmek için Lifecycle duyarlı bileşenler kullanabilirsiniz. AndroidX Lifecycle kütüphanesi, yaşam döngüsü durumu değiştiğinde geri çağırmayı otomatik olarak kaydeden ve iptal eden özel bir LifecycleObserver oluşturmanıza olanak tanır.

Service'te Kayıt

Arka plan görevleri için kayıt, Service veya WorkManager'da yapılır. Android 8+'da, arka plan hizmetlerinin başlatma kısıtlamaları olduğunu unutmayın. NetworkType ile WorkManager, belirli bir ağ durumu altında görevleri yürütmenin daha güvenilir bir yoludur, çünkü uyumluluk API'si ile entegredir ve Doze moduna saygı duyar.

NetworkCallback'in Temel Metotları

NetworkCallback, ağ durumu değiştiğinde çağrılan bir dizi metot sağlar. Tüm metotların geçersiz kılınması gerekmez — yalnızca uygulamanızın belirli görevi için gerekenleri uygulayın. onAvailable ve onLost, temel bağlantı izlemesi için minimum gereklidir.

MetotNe Zaman ÇağrılırParametreler
onAvailableAğ kullanıma hazırNetwork — ağ nesnesi
onLostAğ kayboldu veya bağlantı kesildiNetwork — ağ nesnesi
onCapabilitiesChangedAğ yetenekleri değiştiNetwork, NetworkCapabilities
onBlockedStatusChangedEngelleme durumu değiştiNetwork, Boolean
onNetworkSuspendedSistem tarafından ağ askıya alındıNetwork
onNetworkResumedAskıya alındıktan sonra ağ devam ettirildiNetwork

onCapabilitiesChanged Metodu

Bu metot, ağ hakkında ayrıntılı bilgi almak için anahtardır. NetworkCapabilities parametresi şu bayrakları içerir: NET_CAPABILITY_INTERNET — internet erişimi mevcut, NET_CAPABILITY_NOT_METERED — sınırsız bağlantı, NET_CAPABILITY_NOT_ROAMING — dolaşım yok. Sinyal gecikmesi ve bant genişliği de öğrenilebilir.

Kablolu portallar özel bir durumdur: bir portal aracılığıyla halka açık Wi-Fi ağına bağlanırken, onCapabilitiesChanged metodu hemen INTERNET göstermez. Ağ başlangıçta kullanılabilir ancak internet olmadan — tarayıcı aracılığıyla yetkilendirme gereklidir. Geliştiricilerin uygulama mantığında bu gecikmeyi hesaba katması gerekir.

onBlockedStatusChanged Metodu

Sistem, uygulama için ağ trafiğini engellediğinde çağrılır — örneğin, veri tasarrufu modu etkinleştirildiğinde veya arka plan verileri kısıtlandığında. onBlockedStatusChanged, uygulamanın ağ isteklerinin geçici olarak yasaklandığını bilmesini ve yerel işlemeye geçmesini sağlar.

NetworkCallback Uygulama Örnekleri

İnternet erişimini izlemek ve kablolu portalları yönetmek için pratik bir NetworkCallback uygulamasına bakalım. Aşağıdaki örnek, NET_CAPABILITY_INTERNET kontrolünü ve Google sunucusuna HTTP isteği yoluyla bağlantı doğrulamasını göstermektedir.

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}")
        // Ağ isteklerini durdur
    }
}

Kablolu Portalları Yönetme

Yetkilendirme gerektiren halka açık bir ağa (kafe, havaalanı) bağlanırken, sistem önce onAvailable bildirir, ancak onCapabilitiesChanged INTERNET göstermeyebilir. Bu gibi durumlarda, https://www.google.com/generate_204 gibi kararlı bir uç noktaya HTTP isteği yoluyla ek doğrulama gereklidir.

İstek 204 kodunu döndürürse — internet mevcuttur. Yönlendirme varsa (301, 302, 307) — tarayıcı aracılığıyla yetkilendirme gereklidir. Bu durumda, portal kimlik doğrulamasını tamamlamak için yönlendirme URL'si ile bir WebView veya Intent açabilirsiniz.

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}")
        }
    }
}

Diğer Ağ İzleme Yöntemlerinden Farkları

NetworkCallback'ten önce, ağ izlemenin birincil yöntemi android.net.conn.CONNECTIVITY_CHANGE filtresiyle BroadcastReceiver idi. Bu yaklaşımın önemli dezavantajları vardı: birkaç saniyelik gecikmeler, arayüz türü bilgisi eksikliği ve cihazın sürekli uyanması nedeniyle artan güç tüketimi.

Modern bir alternatif, LiveData veya StateFlow'un NetworkCallback ile birleştirilmesidir. Desen, geri çağırmayı, durum değişikliklerini otomatik olarak UI'ye bildiren reaktif bir akışa sarmayı içerir. Örneğin, NetworkStatus türünde bir MutableStateFlow, geri çağırma metotları içinde güncellenir ve bir ViewCollector değişikliklere abone olur.

YöntemAPI LevelGecikmeAyrıntı SeviyesiGüç Tüketimi
BroadcastReceiver1+yüksekdüşükyüksek
NetworkCallback21+düşükyüksekdüşük
ConnectivityManager.getActiveNetwork23+anındaortasıfır
NWPathMonitor (iOS)iOS 12+düşükyüksekdüşük

Arka Plan Modunda Çalışma

Android 10'dan itibaren arka plan kısıtlamaları daha katı hale gelmiştir ve uygulama arka plandayken NetworkCallback çağrılmayabilir. Kritik görevler için — ağ kullanılabilir olduğunda veri yükleme gibi — NetworkType.CONNECTED kısıtlamasıyla WorkManager kullanın. WorkManager, ağ koşulları karşılandığında görev yürütmeyi garanti eder.

Android 12+'da, CONNECTIVITY_ACTION için BroadcastReceiver'ın manifest kaydı konusunda kısıtlama vardır. Geliştiricilerin NetworkCallback'e geçmesi veya WorkManager kullanması gerekir. Google Play politikası Ağustos 2022'den itibaren bu eylem için manifest kaydının kaldırılmasını gerektirmektedir.

Sıkça Sorulan Sorular

Ağ için NetworkCallback ve BroadcastReceiver arasındaki fark nedir?

CONNECTIVITY_CHANGE ile BroadcastReceiver, ayrıntı olmadan ve birkaç saniyeye kadar gecikmeyle yalnızca ağ değişikliği olgusunu sağlar. NetworkCallback asenkron çalışır, bir Network nesnesi, arayüz türü, bağlantı yetenekleri sağlar ve Android 12+'da yasak olan manifest kaydı gerektirmez.

NetworkCallback arka planda kullanılabilir mi?

Android 10+'da, arka plan kısıtlamaları NetworkCallback'in çağrılmasını geciktirebilir veya engelleyebilir. Arka plan görevleri için NetworkType kısıtlamasıyla WorkManager kullanın — güç tasarrufu modundan bağımsız olarak koşullar karşılandığında görev yürütmeyi garanti eder.

NetworkCallback kaydı nasıl iptal edilir?

ConnectivityManager üzerinde unregisterNetworkCallback metodunu çağırın, kayıt sırasında kullanılan aynı geri çağırma örneğini iletin. İptal edilmeyen bir geri çağırma, sistem referansını tuttuğu için bellek sızıntısına neden olabilir. Her zaman onStop veya onDestroy'de iptal edin.

NetworkCallback için minimum Android sürümü nedir?

NetworkCallback, API Level 21 (Android 5.0 Lollipop)'den itibaren kullanılabilir. Daha eski sürümlere sahip cihazlar için BroadcastReceiver veya daha geniş destek için API'yi sarmalayan AndroidX Activity NetworkCallback gibi uyumluluk kütüphanelerini kullanın.

Geri çağırma olmadan mevcut ağ durumu nasıl kontrol edilir?

ConnectivityManager.getActiveNetwork'ü (API 23+) getNetworkCapabilities ile birlikte kullanın. Metot, değişikliklere abone olmadan eşzamanlı olarak mevcut aktif ağı döndürür. API 21-22 için, yeni sürümlerde kullanımdan kaldırılmış olarak işaretlenen getActiveNetworkInfo'yu kullanın.

Özet

  • NetworkCallback, ConnectivityManager aracılığıyla sürekli yoklama olmadan asenkron ağ izleme için Android SDK'nın soyut bir sınıfıdır.
  • onAvailable metodu ağ bağlantısını bildirir, onLost — bağlantı kaybını, onCapabilitiesChanged — ağ yeteneklerindeki değişiklikleri bildirir.
  • Kayıt, bir NetworkRequest ve geri çağırma örneği ile registerNetworkCallback aracılığıyla yapılır.
  • Yaşam döngüsü, Activity için onStop ve Fragment için onPause'da kaydın iptal edilmesini gerektirir.
  • Kablolu portallar, gerçek internet erişimini doğrulamak için generate_204'e ek HTTP isteğiyle yönetilir.
  • NetworkCallback, Android 12+'da manifestte yasak olan CONNECTIVITY_ACTION için BroadcastReceiver'ın yerini almıştır.
  • Arka plan görevleri için, doğrudan NetworkCallback kaydı yerine NetworkType.CONNECTED ile WorkManager kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun