NetworkCallback: bu nədir, tətbiqi və Android-də şəbəkənin idarə edilməsi

Müəllif: IT Sectr Dərc olunub: 2026-03-10 Oxuma vaxtı: 9 dəq

NetworkCallback — ConnectivityManager vasitəsilə şəbəkə vəziyyətindəki dəyişiklikləri izləmək üçün Android SDK-da abstrakt sinifdir. Android Developers Documentation (2025)-ə görə, NetworkCallback-dən istifadə tətbiqə qoşulma, ayrılma və ya əlaqə xüsusiyyətlərindəki dəyişikliklərə vaxtında reaksiya verməyə imkan verir. ConnectivityManager.NetworkCallback sistem xidmətini daimi sorğulamadan şəbəkə növü, captive portallar və internet itkisi haqqında ətraflı məlumat verir.

Əsas məqamlar

  • NetworkCallback — ConnectivityManager vasitəsilə şəbəkə vəziyyətini izləmək üçün Android SDK-nın daxili abstrakt sinifi.
  • onAvailable metodu cihaz şəbəkəyə qoşulduqda çağırılır və əlaqə detalları ilə Network obyektini ötürür.
  • onLost metodu şəbəkə əlaqəsi itirildikdə işə düşür və tətbiqə şəbəkə sorğularını dayandırmağa imkan verir.
  • onCapabilitiesChanged metodu şəbəkə imkanlarının dəyişməsi barədə xəbərdarlıq edir — internetin görünməsi, captive portal və ya ödənişli əlaqə.
  • Qeydiyyat registerNetworkCallback vasitəsilə aparılır, ləğv — tətbiqin lifecycle-də unregisterNetworkCallback ilə.

NetworkCallback nədir?

NetworkCallback — android.net paketindən olan, Android SDK-nın tərkibinə daxil abstrakt sinifdir. ConnectivityManager sistem xidməti vasitəsilə şəbəkə əlaqəsi vəziyyətindəki dəyişikliklər haqqında bildirişlər almaq üçün nəzərdə tutulub.

NetworkCallback meydana gəlməzdən əvvəl tərtibatçılar şəbəkəni izləmək üçün BroadcastReceiver yayım qəbuledicilərindən istifadə edirdilər. Bu yanaşma manifestdə daimi qeydiyyat tələb edir, gecikmə ilə işləyir və əlaqə xüsusiyyətləri haqqında ətraflı məlumat vermirdi. Android 5.0 (API 21) NetworkCallback-i daha çevik və məhsuldar alternativ olaraq təqdim etdi.

Callback asinxron işləyir: tətbiq ConnectivityManager vasitəsilə hadisələrə abunə olur və şəbəkə vəziyyəti dəyişdikdə sistem callback metodlarını çağırır. Bu, şəbəkə statusunun dövri sorğulanması (polling) ehtiyacını aradan qaldıraraq batareya və prosessor resurslarına qənaət edir.

Android-də callback necə işləyir

ConnectivityManager cihazın bütün şəbəkə interfeyslərini idarə edir — Wi-Fi, mobil məlumat, Ethernet, VPN. Bu interfeyslərdən hər hansı biri dəyişdikdə sistem Network obyekti yaradır və onu qeydiyyatdan keçirilmiş callback-in müvafiq metoduna ötürür. Hər Network-un unikal identifikatoru var, yenidən qoşulma zamanı dəyişir.

Callback konkret şəbəkə növünə bağlı deyil — eyni anda bütün mövcud interfeysləri izləyə bilər. Əlaqə növlərini filtrləmək üçün tələb olunan nəqliyyat protokollarını (Wi-Fi, mobil məlumat, Ethernet) və şəbəkə imkanlarını göstərən NetworkRequest sinfindən istifadə olunur.

NetworkCallback-i tətbiqdə necə qeydiyyatdan keçirmək

NetworkCallback-in qeydiyyatı ConnectivityManager.registerNetworkCallback metodu vasitəsilə aparılır. Birinci parametr kimi şəbəkə tələblərini təsvir edən NetworkRequest.Builder, ikinci olaraq callback nümunəsi ötürülür. İşləmək üçün manifestdə ACCESS_NETWORK_STATE icazəsi tələb olunur.

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

        override fun onLost(network: Network) {
            Log.d("Network", "İtirildi: ${network}")
        }
    }

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

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

Activity və Fragment-də qeydiyyat

Tövsiyə olunur ki, NetworkCallback tətbiq ön planda olduqda qeydiyyatdan keçirilsin və fon keçdikdə ləğv edilsin. Activity-də callback-in həyat dövrünü idarə etmək üçün onStart və onStop-dan istifadə etmək rahatdır. Fragment-də — onResume və onPause.

Qeydiyyatın idarəsini asanlaşdırmaq üçün Lifecycle-aware komponentlərindən istifadə etmək olar. AndroidX Lifecycle kitabxanası həyat dövrü vəziyyəti dəyişdikdə avtomatik olaraq callback-i qeydiyyatdan keçirən və ləğv edən fərdi LifecycleObserver yaratmağa imkan verir.

Servisdə qeydiyyat

Fon tapşırıqları üçün qeydiyyat Service və ya WorkManager-də aparılır. Nəzərə almaq lazımdır ki, Android 8+-da fon servislərinin işə salınmasında məhdudiyyətlər var. NetworkType ilə WorkManager — müəyyən şəbəkə vəziyyətində tapşırıqları yerinə yetirmək üçün daha etibarlı üsuldur, çünki uyğunluq API-i ilə inteqrasiya olunub və Doze rejimini nəzərə alır.

NetworkCallback-in əsas metodları

NetworkCallback şəbəkə vəziyyəti dəyişdikdə çağırılan metodlar dəsti təqdim edir. Bütün metodları yenidən təyin etmək məcburi deyil — yalnız tətbiqin konkret tapşırığı üçün lazım olanları həyata keçirmək kifayətdir. onAvailable və onLost əsas əlaqə monitorinqi üçün minimal tələb olunanlardır.

MetodNə vaxt çağırılırParametrlər
onAvailableŞəbəkə istifadəyə hazırdırNetwork — şəbəkə obyekti
onLostŞəbəkə itirilib və ya söndürülübNetwork — şəbəkə obyekti
onCapabilitiesChangedŞəbəkə imkanları dəyişibNetwork, NetworkCapabilities
onBlockedStatusChangedBloklama statusu dəyişibNetwork, Boolean
onNetworkSuspendedŞəbəkə sistem tərəfindən dayandırılıbNetwork
onNetworkResumedŞəbəkə dayandırılmadan sonra bərpa olunubNetwork

onCapabilitiesChanged metodu

Bu metod şəbəkə haqqında ətraflı məlumat əldə etmək üçün açardır. NetworkCapabilities parametri bayraqları ehtiva edir: NET_CAPABILITY_INTERNET — internetə çıxışın olması, NET_CAPABILITY_NOT_METERED — limitsiz əlaqə, NET_CAPABILITY_NOT_ROAMING — rouminqin olmaması. Həmçinin siqnal gecikməsi və ötürmə qabiliyyətini öyrənmək olar.

Captive portallar (captive portals) — ayrıca haldır: ictimai Wi-Fi şəbəkəsinə portal vasitəsilə qoşulduqda onCapabilitiesChanged metodu dərhal INTERNET göstərmir. Əvvəlcə şəbəkə mövcuddur, lakin internet yoxdur — brauzer vasitəsilə autorizasiya tələb olunur. Tərtibatçı tətbiq məntiqində bu gecikməni nəzərə almalıdır.

onBlockedStatusChanged metodu

Sistem tətbiq üçün şəbəkə trafikini blokladıqda çağırılır — məsələn, məlumat qənaət rejimi və ya fon məlumatlarının məhdudlaşdırılması zamanı. onBlockedStatusChanged tətbiqə onun şəbəkə sorğularının müvəqqəti qadağan edildiyini öyrənməyə və lokal emalata keçməyə imkan verir.

NetworkCallback-in tətbiq nümunələri

İnternetə çıxışı izləmək və captive portalları idarə etmək üçün NetworkCallback-in praktik tətbiqini nəzərdən keçirək. Aşağıdakı nümunədə NET_CAPABILITY_INTERNET yoxlanışı və Google serverinə HTTP sorğusu vasitəsilə əlaqənin doğrulanması göstərilib.

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", "Mobil məlumat bağlandı")
            hasInternet ->
                Log.d("Network", "Wi-Fi bağlandı")
            else ->
                Log.d("Network", "İnternetə giriş yoxdur")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Əlaqə itirildi: ${network}")
        // Şəbəkə sorğularını dayandır
    }
}

Captive portalların idarə edilməsi

Avtorizasiya tələb edən ictimai şəbəkəyə (kafe, hava limanı) qoşulduqda sistem əvvəlcə onAvailable barədə məlumat verir, lakin onCapabilitiesChanged INTERNET göstərməyə bilər. Belə hallarda sabit endpoint-ə, məsələn https://www.google.com/generate_308 ünvanına HTTP sorğusu vasitəsilə əlavə yoxlama tələb olunur.

Sorğu 204 kodu qaytarırsa — internet var. Yönləndirmə (301, 302, 307) olarsa — brauzer vasitəsilə avtorizasiya tələb olunur. Bu halda portaldə autentifikasiyadan keçmək üçün WebView və ya Intent-i yönləndirmə URL-nə açmaq olar.

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", "İnternet mövcuddur")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Captive portal aşkarlandı")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Doğrulama uğursuz oldu: ${e.message}")
        }
    }
}

Şəbəkə monitorinqinin digər üsullarından fərqlər

NetworkCallback-dən əvvəl şəbəkə monitorinqinin əsas üsulu android.net.conn.CONNECTIVITY_CHANGE filtri ilə BroadcastReceiver idi. Bu yanaşmanın əhəmiyyətli çatışmazlıqları var idi: bir neçə saniyə gecikmə, interfeys növü haqqında məlumatın olmaması, cihazın daimi oyanması səbəbindən artan enerji istehlakı.

Müasir alternativ — NetworkCallback ilə birlikdə LiveData və ya StateFlow. Nümunə ondan ibarətdir ki, callback reaktiv axına bükülür və avtomatik olaraq UI-ya vəziyyət dəyişikliyi barədə məlumat verir. Məsələn, NetworkStatus tipli MutableStateFlow callback metodları daxilində yenilənir, ViewCollector isə dəyişikliklərə abunə olur.

MetodAPI LevelGecikməDetallaşdırmaEnerji istehlakı
BroadcastReceiver1+yüksəkaşağıyüksək
NetworkCallback21+aşağıyüksəkaşağı
ConnectivityManager.getActiveNetwork23+aniortasıfır
NWPathMonitor (iOS)iOS 12+aşağıyüksəkaşağı

Fon rejimi ilə iş

Android 10-dan başlayaraq fon məhdudiyyətləri səviyyəsi sərtləşdirilib və tətbiq fonda olduqda NetworkCallback çağırılmayaya bilər. Kritik vacib tapşırıqlar üçün — məsələn, şəbəkə görünəndə məlumatların yüklənməsi — NetworkType.CONNECTED məhdudiyyəti ilə WorkManager-dən istifadə edin. WorkManager şəbəkə şərtləri yerinə yetirildikdə tapşırığın icrasına zəmanət verir.

Android 12+-da CONNECTIVITY_ACTION üçün BroadcastReceiver-in manifest qeydiyyatı məhdudiyyəti yaranıb. Tərtibatçılar NetworkCallback-ə və ya WorkManager-ə keçməlidirlər. Google Play siyasəti 2022-ci ilin avqustundan bu aksiya üçün manifest qeydiyyatının silinməsini tələb edir.

Tez-tez verilən suallar

NetworkCallback və BroadcastReceiver arasında şəbəkə üçün fərq nədir?

BroadcastReceiver CONNECTIVITY_CHANGE ilə yalnız şəbəkə dəyişməsi faktını verir, detalsız və bir neçə saniyəyə qədər gecikmə ilə. NetworkCallback asinxron işləyir, Network obyekti, interfeys növü, əlaqə imkanları təqdim edir və Android 12+-da qadağan olunmuş manifest qeydiyyatı tələb etmir.

NetworkCallback-i fon rejimində istifadə etmək olarmı?

Android 10+-da fon məhdudiyyətləri NetworkCallback-i gecikdirə və ya çağırmaya bilər. Fon tapşırıqları üçün NetworkType məhdudiyyəti ilə WorkManager istifadə edin — enerji qənaət rejimindən asılı olmayaraq şərtlər yerinə yetirildikdə işin görüləcəyinə zəmanət verir.

NetworkCallback qeydiyyatını necə ləğv etmək olar?

ConnectivityManager-də unregisterNetworkCallback metodunu çağırın, qeydiyyatda istifadə etdiyiniz eyni callback nümunəsini ötürün. Ləğv edilməmiş callback yaddaş sızmasına səbəb ola bilər, çünki sistem ona istinad saxlayır. Həmişə onStop və ya onDestroy-də ləğv edin.

NetworkCallback üçün minimum hansı Android versiyası tələb olunur?

NetworkCallback API Level 21 (Android 5.0 Lollipop)-dən etibarən mövcuddur. Köhnə versiyalı cihazlar üçün BroadcastReceiver və ya AndroidX Activity NetworkCallback kimi uyğunluq kitabxanalarından istifadə edin, onlar API-ni daha geniş dəstək üçün bükür.

Callback olmadan cari şəbəkə vəziyyətini necə yoxlamaq olar?

getNetworkCapabilities ilə birlikdə ConnectivityManager.getActiveNetwork (API 23+) istifadə edin. Metod cari aktiv şəbəkəni sinxron qaytarır, dəyişikliklərə abunə olmadan. API 21-22 üçün getActiveNetworkInfo istifadə edin, o daha yeni versiyalarda deprecated kimi qeyd olunub.

Nəticə

  • NetworkCallback — daimi sorğulama olmadan ConnectivityManager vasitəsilə asinxron şəbəkə monitorinqi üçün Android SDK-nın abstrakt sinifi.
  • onAvailable metodu şəbəkəyə qoşulma barədə xəbərdarlıq edir, onLost — əlaqə itkisi, onCapabilitiesChanged — şəbəkə imkanlarının dəyişməsi.
  • Qeydiyyat registerNetworkCallback vasitəsilə NetworkRequest və callback nümunəsi göstərilməklə aparılır.
  • Həyat dövrü Activity üçün onStop-da, Fragment üçün onPause-da qeydiyyatın ləğvini tələb edir.
  • Captive portallar internetə real çıxışı yoxlamaq üçün generate_204-ə əlavə HTTP sorğusu vasitəsilə idarə olunur.
  • NetworkCallback Android 12+-da manifestdə qadağan olunmuş CONNECTIVITY_ACTION üçün BroadcastReceiver-i əvəz etdi.
  • Fon tapşırıqları üçün birbaşa NetworkCallback qeydiyyatı əvəzinə NetworkType.CONNECTED ilə WorkManager istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun