NetworkCallback: bu nima, qo'llash va Androidda tarmoqni boshqarish

Muallif: IT Sectr Nashr etilgan: 2026-03-10 O'qish vaqti: 9 daq

NetworkCallback — ConnectivityManager orqali tarmoq holati o'zgarishlarini kuzatish uchun Android SDK-dagi abstrakt sinf. Android Developers Documentation (2025) ma'lumotlariga ko'ra, NetworkCallback dan foydalanish ilovaga ulanish, uzilish yoki ulanish xususiyatlarining o'zgarishiga o'z vaqtida reaksiya berish imkonini beradi. ConnectivityManager.NetworkCallback tizim xizmatini doimiy so'roq qilmasdan tarmoq turi, captive portallar va internet yo'qolishi haqida batafsil ma'lumot beradi.

Asosiy fikrlar

  • NetworkCallback — ConnectivityManager orqali tarmoq holatini kuzatish uchun Android SDK-ning o'rnatilgan abstrakt sinfi.
  • onAvailable metodi qurilma tarmoqqa ulanganda chaqiriladi va ulanish tafsilotlari bilan Network obyektini uzatadi.
  • onLost metodi tarmoq ulanishi yo'qolganda ishga tushadi va ilovaga tarmoq so'rovlarini to'xtatish imkonini beradi.
  • onCapabilitiesChanged metodi tarmoq imkoniyatlari o'zgarishi haqida xabar beradi — internet paydo bo'lishi, captive portal yoki pullik ulanish.
  • Ro'yxatdan o'tkazish registerNetworkCallback orqali amalga oshiriladi, bekor qilish — ilovaning lifecycle da unregisterNetworkCallback orqali.

NetworkCallback nima?

NetworkCallback — android.net paketidan olingan, Android SDK tarkibiga kiruvchi abstrakt sinf. U ConnectivityManager tizim xizmati orqali tarmoq ulanish holatidagi o'zgarishlar haqida bildirishnomalar olish uchun mo'ljallangan.

NetworkCallback paydo bo'lgunga qadar dasturchilar tarmoqni kuzatish uchun BroadcastReceiver eshittirish qabul qilgichlaridan foydalanardilar. Bunday yondashuv manifestda doimiy ro'yxatdan o'tkazishni talab qilar, kechikish bilan ishlar va ulanish xususiyatlari haqida batafsil ma'lumot bermas edi. Android 5.0 (API 21) NetworkCallback-ni yanada moslashuvchan va samarali alternativ sifatida taqdim etdi.

Callback asinxron ishlaydi: ilova ConnectivityManager orqali hodisalarga obuna bo'ladi va tarmoq holati o'zgarganda tizim callback metodlarini chaqiradi. Bu tarmoq holatini davriy so'roq qilish (polling) zaruriyatini bartaraf etib, batareya va protsessor resurslarini tejaydi.

Android-da callback qanday ishlaydi

ConnectivityManager qurilmaning barcha tarmoq interfeyslarini boshqaradi — Wi-Fi, mobil ma'lumotlar, Ethernet, VPN. Ushbu interfeyslardan birortasi o'zgarganda tizim Network obyektini yaratadi va uni ro'yxatdan o'tkazilgan callback-ning tegishli metodiga uzatadi. Har bir Network qayta ulanishda o'zgaradigan noyob identifikatorga ega.

Callback muayyan tarmoq turiga bog'liq emas — bir vaqtning o'zida barcha mavjud interfeyslarni kuzatishi mumkin. Ulanish turlarini filtrlash uchun talab qilinadigan transport protokollari (Wi-Fi, mobil ma'lumotlar, Ethernet) va tarmoq imkoniyatlari ko'rsatilgan NetworkRequest sinfidan foydalaniladi.

NetworkCallback-ni ilovada qanday ro'yxatdan o'tkazish

NetworkCallback-ni ro'yxatdan o'tkazish ConnectivityManager.registerNetworkCallback metodi orqali amalga oshiriladi. Birinchi parametr sifatida tarmoq talablarini tavsiflovchi NetworkRequest.Builder, ikkinchi sifatida callback namunasi uzatiladi. Ishlash uchun manifestda ACCESS_NETWORK_STATE ruxsati talab qilinadi.

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

        override fun onLost(network: Network) {
            Log.d("Network", "Yo'qolgan: ${network}")
        }
    }

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

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

Activity va Fragment da ro'yxatdan o'tkazish

Tavsiya etiladiki, NetworkCallback ilova oldingi planda bo'lganda ro'yxatdan o'tkazilsin va fonda ketganda bekor qilinsin. Activity da callback ning hayot aylanishini boshqarish uchun onStart va onStop dan foydalanish qulay. Fragment da — onResume va onPause.

Ro'yxatdan o'tkazishni boshqarishni soddalashtirish uchun Lifecycle-aware komponentlaridan foydalanish mumkin. AndroidX Lifecycle kutubxonasi hayot aylanishi holati o'zgarganda avtomatik ravishda callback-ni ro'yxatdan o'tkazadigan va bekor qiladigan maxsus LifecycleObserver yaratish imkonini beradi.

Xizmatda ro'yxatdan o'tkazish

Fon vazifalari uchun ro'yxatdan o'tkazish Service yoki WorkManager da amalga oshiriladi. Shuni hisobga olish kerakki, Android 8+ da fon xizmatlari ishga tushirishda cheklovlarga ega. NetworkType bilan WorkManager — muayyan tarmoq holatida vazifalarni bajarish uchun ishonchli usul, chunki u moslik API bilan integratsiyalangan va Doze rejimini hisobga oladi.

NetworkCallback-ning asosiy metodlari

NetworkCallback tarmoq holati o'zgarganda chaqiriladigan metodlar to'plamini taqdim etadi. Barcha metodlarni qayta belgilash shart emas — faqat ilovaning muayyan vazifasi uchun zarur bo'lganlarini amalga oshirish kifoya. onAvailable va onLost asosiy ulanish monitoringi uchun minimal talab qilinadi.

MetodQachon chaqiriladiParametrlar
onAvailableTarmoq foydalanishga tayyorNetwork — tarmoq obyekti
onLostTarmoq yo'qolgan yoki o'chirilganNetwork — tarmoq obyekti
onCapabilitiesChangedTarmoq imkoniyatlari o'zgarganNetwork, NetworkCapabilities
onBlockedStatusChangedBloklash holati o'zgarganNetwork, Boolean
onNetworkSuspendedTarmoq tizim tomonidan to'xtatilganNetwork
onNetworkResumedTarmoq to'xtatilgandan keyin qayta tiklanganNetwork

onCapabilitiesChanged metodi

Bu metod tarmoq haqida batafsil ma'lumot olish uchun kalit hisoblanadi. NetworkCapabilities parametri bayroqlarni o'z ichiga oladi: NET_CAPABILITY_INTERNET — internetga kirish mavjudligi, NET_CAPABILITY_NOT_METERED — cheklanmagan ulanish, NET_CAPABILITY_NOT_ROAMING — rouming yo'qligi. Shuningdek signal kechikishi va o'tkazish qobiliyatini bilish mumkin.

Captive portallar (captive portals) — alohida holat: jamoat Wi-Fi tarmog'iga portal orqali ulanganda onCapabilitiesChanged metodi darhol INTERNET ko'rsatmaydi. Avval tarmoq mavjud, lekin internetsiz — brauzer orqali avtorizatsiya talab qilinadi. Dasturchi ilova mantiqida bu kechikishni hisobga olishi kerak.

onBlockedStatusChanged metodi

Tizim ilova uchun tarmoq trafigini bloklaganda chaqiriladi — masalan, ma'lumotlarni tejash rejimi yoki fon ma'lumotlarini cheklashda. onBlockedStatusChanged ilovaga uning tarmoq so'rovlari vaqtincha taqiqlanganligini bilishga va mahalliy ishlov berishga o'tishga imkon beradi.

NetworkCallback-ni qo'llash misollari

Internetga kirishni kuzatish va captive portallarni boshqarish uchun NetworkCallback-ni amaliy qo'llashni ko'rib chiqamiz. Quyidagi misolda NET_CAPABILITY_INTERNET tekshiruvi va Google serveriga HTTP so'rovi orqali ulanishni tasdiqlash ko'rsatilgan.

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 ma'lumot ulandi")
            hasInternet ->
                Log.d("Network", "Wi-Fi ulandi")
            else ->
                Log.d("Network", "Internetga kirish yo'q")
        }
    }

    override fun onLost(network: Network) {
        Log.d("Network", "Ulanish yo'qoldi: ${network}")
        // Tarmoq so'rovlarini to'xtatish
    }
}

Captive portallarni boshqarish

Avtorizatsiya talab qiladigan jamoat tarmog'iga (kafe, aeroport) ulanganda tizim avval onAvailable haqida xabar beradi, lekin onCapabilitiesChanged INTERNET ko'rsatmasligi mumkin. Bunday hollarda barqaror endpoint-ga, masalan https://www.google.com/generate_204 manziliga HTTP so'rovi orqali qo'shimcha tekshirish talab qilinadi.

Agar so'rov 204 kodini qaytarsa — internet mavjud. Agar qayta yo'naltirish (301, 302, 307) bo'lsa — brauzer orqali avtorizatsiya talab qilinadi. Bu holda portaldan autentifikatsiyadan o'tish uchun WebView yoki Intent-ni qayta yo'naltirish URL-iga ochish mumkin.

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 mavjud")
                in HttpURLConnection.HTTP_MOVED_PERM
                        ..HttpURLConnection.HTTP_TEMP_REDIRECT ->
                    Log.d("Network", "Captive portal aniqlandi")
            }
            connection.disconnect()
        } catch (e: Exception) {
            Log.e("Network", "Tasdiqlash muvaffaqiyatsiz: ${e.message}")
        }
    }
}

Tarmoq monitoringining boshqa usullaridan farqlari

NetworkCallback dan oldin tarmoq monitoringining asosiy usuli android.net.conn.CONNECTIVITY_CHANGE filtri bilan BroadcastReceiver edi. Bu yondashuv muhim kamchiliklarga ega edi: bir necha soniya kechikish, interfeys turi haqida ma'lumot yo'qligi, qurilmaning doimiy uyg'onishi tufayli yuqori energiya sarfi.

Zamonaviy alternativ — NetworkCallback bilan birgalikda LiveData yoki StateFlow. Naqsh callback-ni reaktiv oqimga o'rashdan iborat bo'lib, u avtomatik ravishda UI-ga holat o'zgarishi haqida xabar beradi. Masalan, NetworkStatus tipidagi MutableStateFlow callback metodlari ichida yangilanadi, ViewCollector esa o'zgarishlarga obuna bo'ladi.

UsulAPI LevelKechikishTafsilotEnergiya sarfi
BroadcastReceiver1+yuqoripastyuqori
NetworkCallback21+pastyuqoripast
ConnectivityManager.getActiveNetwork23+darholo'rtachanol
NWPathMonitor (iOS)iOS 12+pastyuqoripast

Fon rejimi bilan ishlash

Android 10 dan boshlab fon cheklovlari darajasi qattiqlashtirilgan va ilova fonda bo'lganda NetworkCallback chaqirilmasligi mumkin. Kritik muhim vazifalar uchun — masalan, tarmoq paydo bo'lganda ma'lumotlarni yuklash — NetworkType.CONNECTED cheklovi bilan WorkManager dan foydalaning. WorkManager tarmoq shartlari bajarilganda vazifaning bajarilishini kafolatlaydi.

Android 12+ da CONNECTIVITY_ACTION uchun BroadcastReceiver ning manifest ro'yxatdan o'tkazish cheklovi paydo bo'ldi. Dasturchilar NetworkCallback ga yoki WorkManager ga o'tishlari shart. Google Play siyosati 2022 yil avgustidan boshlab bu harakat uchun manifest ro'yxatdan o'tkazishni olib tashlashni talab qiladi.

Tez-tez beriladigan savollar

NetworkCallback va BroadcastReceiver o'rtasida tarmoq uchun qanday farq bor?

BroadcastReceiver CONNECTIVITY_CHANGE bilan faqat tarmoq o'zgarishi faktini beradi, tafsilotsiz va bir necha soniyagacha kechikish bilan. NetworkCallback asinxron ishlaydi, Network obyekti, interfeys turi, ulanish imkoniyatlarini taqdim etadi va Android 12+ da taqiqlangan manifest ro'yxatdan o'tkazishni talab qilmaydi.

NetworkCallback ni fon rejimida ishlatish mumkinmi?

Android 10+ da fon cheklovlari NetworkCallback ni kechiktirishi yoki chaqirmasligi mumkin. Fon vazifalari uchun NetworkType cheklovi bilan WorkManager dan foydalaning — energiya tejash rejimidan qat'iy nazar shartlar bajarilganda ishning bajarilishini kafolatlaydi.

NetworkCallback ro'yxatdan o'tkazishni qanday bekor qilish mumkin?

ConnectivityManager da unregisterNetworkCallback metodini chaqiring, ro'yxatdan o'tkazishda ishlatilgan bir xil callback namunasini uzating. Bekor qilinmagan callback xotira sizib ketishiga sabab bo'lishi mumkin, chunki tizim unga havolani saqlaydi. Har doim onStop yoki onDestroy da bekor qiling.

NetworkCallback uchun minimal qaysi Android versiyasi talab qilinadi?

NetworkCallback API Level 21 (Android 5.0 Lollipop) dan boshlab mavjud. Eskiroq versiyadagi qurilmalar uchun BroadcastReceiver yoki AndroidX Activity NetworkCallback kabi moslik kutubxonalaridan foydalaning, ular API-ni kengroq qo'llab-quvvatlash uchun o'rab oladi.

Callback siz joriy tarmoq holatini qanday tekshirish mumkin?

getNetworkCapabilities bilan birgalikda ConnectivityManager.getActiveNetwork (API 23+) dan foydalaning. Metod joriy faol tarmoqni sinxron qaytaradi, o'zgarishlarga obuna bo'lmasdan. API 21-22 uchun getActiveNetworkInfo dan foydalaning, u yangi versiyalarda deprecated deb belgilangan.

Xulosa

  • NetworkCallback — doimiy so'roq qilmasdan ConnectivityManager orqali asinxron tarmoq monitoringi uchun Android SDK ning abstrakt sinfi.
  • onAvailable metodi tarmoqqa ulanish haqida xabar beradi, onLost — ulanish yo'qolishi, onCapabilitiesChanged — tarmoq imkoniyatlari o'zgarishi.
  • Ro'yxatdan o'tkazish registerNetworkCallback orqali NetworkRequest va callback namunasi ko'rsatilgan holda amalga oshiriladi.
  • Hayot aylanishi Activity uchun onStop da, Fragment uchun onPause da ro'yxatdan o'tkazishni bekor qilishni talab qiladi.
  • Captive portallar internetga real kirishni tekshirish uchun generate_204 ga qo'shimcha HTTP so'rovi orqali boshqariladi.
  • NetworkCallback Android 12+ da manifestda taqiqlangan CONNECTIVITY_ACTION uchun BroadcastReceiver ni almashtirdi.
  • Fon vazifalari uchun to'g'ridan-to'g'ri NetworkCallback ro'yxatdan o'tkazish o'rniga NetworkType.CONNECTED bilan WorkManager dan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing