NetworkCallback: یہ کیا ہے، اطلاق اور Android میں نیٹ ورک ہینڈلنگ

مصنف: IT Sectr اشاعت: 2026-03-10 مطالعے کا وقت: 9 منٹ

NetworkCallback ConnectivityManager کے ذریعے نیٹ ورک کی حالت میں تبدیلیوں کی نگرانی کے لیے Android SDK میں ایک مجرد کلاس ہے۔ Android Developers Documentation (2025) کے مطابق، NetworkCallback کا استعمال آپ کی ایپ کو کنکشن، منقطع ہونے یا کنکشن کی خصوصیات میں تبدیلیوں پر بروقت ردعمل دینے کی اجازت دیتا ہے۔ ConnectivityManager.NetworkCallback سسٹم سروس کو مسلسل پول کیے بغیر نیٹ ورک کی قسم، کیپٹیو پورٹلز اور انٹرنیٹ ضائع ہونے کے بارے میں تفصیلی معلومات فراہم کرتا ہے۔

اہم نکات

  • NetworkCallback ConnectivityManager کے ذریعے نیٹ ورک کی حالت کو ٹریک کرنے کے لیے Android SDK میں ایک بلٹ ان مجرد کلاس ہے۔
  • onAvailable طریقہ اس وقت کال کیا جاتا ہے جب ڈیوائس نیٹ ورک سے منسلک ہوتی ہے، کنکشن کی تفصیلات کے ساتھ Network آبجیکٹ پاس کرتا ہے۔
  • onLost طریقہ نیٹ ورک کنیکٹیویٹی ضائع ہونے پر متحرک ہوتا ہے، جس سے ایپ نیٹ ورک کی درخواستیں روک سکتی ہے۔
  • onCapabilitiesChanged طریقہ نیٹ ورک کی صلاحیتوں میں تبدیلیوں — انٹرنیٹ کی دستیابی، کیپٹیو پورٹل یا میٹرڈ کنکشن کے بارے میں مطلع کرتا ہے۔
  • رجسٹریشن registerNetworkCallback کے ذریعے کی جاتی ہے، منسوخی unregisterNetworkCallback کے ذریعے ایپ لائف سائیکل میں کی جاتی ہے۔

NetworkCallback کیا ہے؟

NetworkCallback android.net پیکیج سے ایک مجرد کلاس ہے، جو Android SDK کا حصہ ہے۔ یہ ConnectivityManager سسٹم سروس کے ذریعے نیٹ ورک کنکشن کی حالت میں تبدیلیوں کے بارے میں اطلاعات حاصل کرنے کے لیے ڈیزائن کیا گیا ہے۔

NetworkCallback سے پہلے، ڈویلپرز نیٹ ورک کی تبدیلیوں کو ٹریک کرنے کے لیے BroadcastReceiver استعمال کرتے تھے۔ اس طریقہ کار میں مینی فیسٹ میں مسلسل رجسٹریشن درکار تھی، تاخیر سے کام کرتا تھا اور کنکشن کی خصوصیات کے بارے میں تفصیلی معلومات فراہم نہیں کرتا تھا۔ Android 5.0 (API 21) نے NetworkCallback کو ایک زیادہ لچکدار اور کارکردہ متبادل کے طور پر متعارف کرایا۔

کال بیک غیر متزامن طور پر کام کرتا ہے: ایپ ConnectivityManager کے ذریعے واقعات کو سبسکرائب کرتی ہے، اور نیٹ ورک کی حالت بدلنے پر سسٹم کال بیک کے طریقوں کو کال کرتا ہے۔ اس سے نیٹ ورک کی حالت کے متواتر پولنگ کی ضرورت ختم ہو جاتی ہے، بیٹری اور CPU وسائل بچتے ہیں۔

Android میں کال بیک کیسے کام کرتا ہے

ConnectivityManager ڈیوائس پر تمام نیٹ ورک انٹرفیسز — Wi-Fi، موبائل ڈیٹا، Ethernet، VPN کا انتظام کرتا ہے۔ جب ان میں سے کوئی بھی انٹرفیس بدلتا ہے، سسٹم ایک Network آبجیکٹ بناتا ہے اور اسے رجسٹرڈ کال بیک کے متعلقہ طریقہ کو بھیجتا ہے۔ ہر Network کا ایک منفرد شناخت کنندہ ہوتا ہے جو دوبارہ منسلک ہونے پر بدل جاتا ہے۔

کال بیک کسی مخصوص نیٹ ورک کی قسم سے منسلک نہیں ہے — یہ ایک ساتھ تمام دستیاب انٹرفیسز کو ٹریک کر سکتا ہے۔ کنکشن کی اقسام کو فلٹر کرنے کے لیے، NetworkRequest کلاس استعمال کی جاتی ہے، جو مطلوبہ ٹرانسپورٹ پروٹوکول (Wi-Fi، سیلولر ڈیٹا، Ethernet) اور نیٹ ورک کی صلاحیتوں کی وضاحت کرتی ہے۔

اپنی ایپ میں NetworkCallback کیسے رجسٹر کریں

NetworkCallback رجسٹریشن ConnectivityManager.registerNetworkCallback طریقہ کے ذریعے کی جاتی ہے۔ پہلا پیرامیٹر ایک NetworkRequest.Builder ہے جو نیٹ ورک کی ضروریات کو بیان کرتا ہے، دوسرا ایک کال بیک مثال ہے۔ مینی فیسٹ میں ACCESS_NETWORK_STATE کی اجازت درکار ہے۔

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 اور Fragment میں رجسٹریشن

سفارش کی جاتی ہے کہ جب ایپ پیش منظر میں ہو تو NetworkCallback رجسٹر کریں اور پس منظر میں جانے پر منسوخ کریں۔ Activity میں، کال بیک لائف سائیکل کو منظم کرنے کے لیے onStart اور onStop استعمال کریں۔ Fragment میں، onResume اور onPause استعمال کریں۔

رجسٹریشن کے انتظام کو آسان بنانے کے لیے، آپ Lifecycle-آگاہ اجزاء استعمال کر سکتے ہیں۔ AndroidX Lifecycle لائبریری آپ کو ایک حسب ضرورت LifecycleObserver بنانے کی اجازت دیتی ہے جو لائف سائیکل کی حالت بدلنے پر خود بخود کال بیک کو رجسٹر اور منسوخ کرتا ہے۔

Service میں رجسٹریشن

پس منظر کے کاموں کے لیے، رجسٹریشن Service یا WorkManager میں کی جاتی ہے۔ نوٹ کریں کہ Android 8+ پر، پس منظر کی خدمات پر آغاز کی پابندیاں ہیں۔ NetworkType کے ساتھ WorkManager مخصوص نیٹ ورک کی حالت میں کاموں کو انجام دینے کا زیادہ قابل اعتماد طریقہ ہے، کیونکہ یہ مطابقت API کے ساتھ مربوط ہے اور Doze موڈ کا احترام کرتا ہے۔

NetworkCallback کے اہم طریقے

NetworkCallback طریقوں کا ایک سیٹ فراہم کرتا ہے جو نیٹ ورک کی حالت بدلنے پر کال کیے جاتے ہیں۔ تمام طریقوں کو اوور رائڈ کرنے کی ضرورت نہیں ہے — صرف وہی لاگو کریں جو آپ کی ایپ کے مخصوص کام کے لیے درکار ہوں۔ onAvailable اور onLost بنیادی کنکشن مانیٹرنگ کے لیے کم از کم ضروری ہیں۔

طریقہکب کال کیا جاتا ہےپیرامیٹرز
onAvailableنیٹ ورک استعمال کے لیے دستیاب ہےNetwork — نیٹ ورک آبجیکٹ
onLostنیٹ ورک ضائع یا منقطع ہو گیاNetwork — نیٹ ورک آبجیکٹ
onCapabilitiesChangedنیٹ ورک کی صلاحیتیں بدل گئیںNetwork, NetworkCapabilities
onBlockedStatusChangedبلاکنگ کی حالت بدل گئیNetwork, Boolean
onNetworkSuspendedسسٹم کے ذریعے نیٹ ورک معطلNetwork
onNetworkResumedمعطلی کے بعد نیٹ ورک دوبارہ شروعNetwork

onCapabilitiesChanged طریقہ

یہ طریقہ نیٹ ورک کے بارے میں تفصیلی معلومات حاصل کرنے کی کلید ہے۔ NetworkCapabilities پیرامیٹر میں جھنڈے شامل ہیں: NET_CAPABILITY_INTERNET — انٹرنیٹ تک رسائی دستیاب، NET_CAPABILITY_NOT_METERED — لامحدود کنکشن، NET_CAPABILITY_NOT_ROAMING — کوئی رومنگ نہیں۔ سگنل میں تاخیر اور بینڈوتھ بھی معلوم کی جا سکتی ہے۔

کیپٹیو پورٹل ایک خاص معاملہ ہے: پورٹل کے ذریعے عوامی Wi-Fi نیٹ ورک سے منسلک ہوتے وقت، onCapabilitiesChanged طریقہ فوری طور پر INTERNET نہیں دکھاتا۔ نیٹ ورک ابتدائی طور پر دستیاب ہے لیکن انٹرنیٹ کے بغیر — براؤزر کے ذریعے اجازت درکار ہے۔ ڈویلپرز کو ایپ کی منطق میں اس تاخیر کو مدنظر رکھنا ہوگا۔

onBlockedStatusChanged طریقہ

جب سسٹم ایپ کے لیے نیٹ ورک ٹریفک بلاک کرتا ہے — مثال کے طور پر، ڈیٹا سیور موڈ فعال ہونے یا پس منظر کے ڈیٹا کو محدود کرنے پر — یہ کال کیا جاتا ہے۔ onBlockedStatusChanged ایپ کو بتاتا ہے کہ اس کی نیٹ ورک کی درخواستیں عارضی طور پر ممنوع ہیں اور مقامی پروسیسنگ پر سوئچ کرتا ہے۔

NetworkCallback نفاذ کی مثالیں

آئیے انٹرنیٹ تک رسائی کی نگرانی اور کیپٹیو پورٹلز کو سنبھالنے کے لیے ایک عملی NetworkCallback نفاذ دیکھتے ہیں۔ نیچے دی گئی مثال NET_CAPABILITY_INTERNET کی جانچ اور Google سرور پر HTTP درخواست کے ذریعے کنکشن کی توثیق دکھاتی ہے۔

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}")
        // نیٹ ورک کی درخواستیں روکیں
    }
}

کیپٹیو پورٹلز کو سنبھالنا

اجازت کے ساتھ عوامی نیٹ ورک (کیفے، ہوائی اڈہ) سے منسلک ہوتے وقت، سسٹم پہلے onAvailable بتاتا ہے، لیکن onCapabilitiesChanged INTERNET نہیں دکھا سکتا۔ ایسی صورتوں میں، ایک مستحکم اینڈپوائنٹ جیسے https://www.google.com/generate_204 پر HTTP درخواست کے ذریعے اضافی توثیق درکار ہے۔

اگر درخواست کوڈ 204 لوٹاتی ہے — انٹرنیٹ دستیاب ہے۔ اگر ری ڈائریکٹ (301, 302, 307) — براؤزر کے ذریعے اجازت درکار ہے۔ اس صورت میں، آپ پورٹل کی تصدیق مکمل کرنے کے لیے ری ڈائریکٹ URL کے ساتھ WebView یا Intent کھول سکتے ہیں۔

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

نیٹ ورک مانیٹرنگ کے دیگر طریقوں سے فرق

NetworkCallback سے پہلے، نیٹ ورک مانیٹرنگ کا بنیادی طریقہ android.net.conn.CONNECTIVITY_CHANGE فلٹر کے ساتھ BroadcastReceiver تھا۔ اس طریقہ کار میں اہم خامیاں تھیں: کئی سیکنڈ کی تاخیر، انٹرفیس کی قسم کی معلومات کی کمی، اور ڈیوائس کے مسلسل جاگنے کی وجہ سے بجلی کی کھپت میں اضافہ۔

ایک جدید متبادل LiveData یا StateFlow کو NetworkCallback کے ساتھ ملانا ہے۔ پیٹرن میں کال بیک کو ایک ری ایکٹیو سٹریم میں لپیٹنا شامل ہے جو خود بخود UI کو حالت کی تبدیلیوں کے بارے میں مطلع کرتا ہے۔ مثال کے طور پر، NetworkStatus قسم کا MutableStateFlow کال بیک طریقوں کے اندر اپ ڈیٹ ہوتا ہے، اور ViewCollector تبدیلیوں کو سبسکرائب کرتا ہے۔

طریقہAPI Levelتاخیرتفصیل کی سطحبجلی کی کھپت
BroadcastReceiver1+زیادہکمزیادہ
NetworkCallback21+کمزیادہکم
ConnectivityManager.getActiveNetwork23+فوریدرمیانیصفر
NWPathMonitor (iOS)iOS 12+کمزیادہکم

پس منظر موڈ میں کام کرنا

Android 10 سے شروع ہو کر، پس منظر کی پابندیاں سخت ہو گئی ہیں اور ایپ پس منظر میں ہونے پر NetworkCallback کال نہیں کیا جا سکتا۔ اہم کاموں کے لیے — جیسے نیٹ ورک دستیاب ہونے پر ڈیٹا لوڈ کرنا — NetworkType.CONNECTED کی رکاوٹ کے ساتھ WorkManager استعمال کریں۔ WorkManager نیٹ ورک کی شرائط پوری ہونے پر کام کی انجام دہی کی ضمانت دیتا ہے۔

Android 12+ میں، CONNECTIVITY_ACTION کے لیے BroadcastReceiver کے مینی فیسٹ رجسٹریشن پر پابندی ہے۔ ڈویلپرز کو NetworkCallback پر منتقل ہونا چاہیے یا WorkManager استعمال کرنا چاہیے۔ Google Play پالیسی اگست 2022 سے اس عمل کے لیے مینی فیسٹ رجسٹریشن ہٹانے کا تقاضا کرتی ہے۔

اکثر پوچھے گئے سوالات

نیٹ ورک کے لیے NetworkCallback اور BroadcastReceiver میں کیا فرق ہے؟

CONNECTIVITY_CHANGE کے ساتھ BroadcastReceiver تفصیلات کے بغیر اور کئی سیکنڈ تک کی تاخیر کے ساتھ صرف نیٹ ورک کی تبدیلی کا حقائق فراہم کرتا ہے۔ NetworkCallback غیر متزامن طور پر کام کرتا ہے، Network آبجیکٹ، انٹرفیس کی قسم، کنکشن کی صلاحیتیں فراہم کرتا ہے اور مینی فیسٹ رجسٹریشن کی ضرورت نہیں ہوتی، جو Android 12+ میں ممنوع ہے۔

کیا NetworkCallback پس منظر میں استعمال کیا جا سکتا ہے؟

Android 10+ پر، پس منظر کی پابندیاں NetworkCallback کو کال کیے جانے میں تاخیر یا روک سکتی ہیں۔ پس منظر کے کاموں کے لیے، NetworkType کی رکاوٹ کے ساتھ WorkManager استعمال کریں — یہ بجلی بچت موڈ سے قطع نظر شرائط پوری ہونے پر کام کی انجام دہی کی ضمانت دیتا ہے۔

NetworkCallback کی رجسٹریشن کیسے منسوخ کریں؟

ConnectivityManager پر unregisterNetworkCallback طریقہ کال کریں، رجسٹریشن کے وقت استعمال کردہ اسی کال بیک مثال کو پاس کریں۔ غیر منسوخ شدہ کال بیک میموری لیک کا سبب بن سکتا ہے کیونکہ سسٹم اس کا حوالہ رکھتا ہے۔ ہمیشہ onStop یا onDestroy میں منسوخ کریں۔

NetworkCallback کے لیے کم از کم Android ورژن کیا ہے؟

NetworkCallback API Level 21 (Android 5.0 Lollipop) سے دستیاب ہے۔ پرانے ورژن والے آلات کے لیے، BroadcastReceiver یا مطابقت لائبریریاں جیسے AndroidX Activity NetworkCallback استعمال کریں، جو وسیع تر تعاون کے لیے API کو لپیٹتی ہیں۔

کال بیک کے بغیر موجودہ نیٹ ورک کی حالت کیسے چیک کریں؟

ConnectivityManager.getActiveNetwork (API 23+) کو getNetworkCapabilities کے ساتھ استعمال کریں۔ طریقہ تبدیلیوں کو سبسکرائب کیے بغیر ہم وقت سازی سے موجودہ فعال نیٹ ورک لوٹاتا ہے۔ API 21-22 کے لیے، getActiveNetworkInfo استعمال کریں، جو نئے ورژنز میں متروک قرار دیا گیا ہے۔

خلاصہ

  • NetworkCallback Android SDK کی ایک مجرد کلاس ہے جو ConnectivityManager کے ذریعے مسلسل پولنگ کے بغیر غیر متزامن نیٹ ورک مانیٹرنگ کے لیے ہے۔
  • onAvailable طریقہ نیٹ ورک کنکشن کے بارے میں مطلع کرتا ہے، onLost — کنکشن ضائع ہونے کے بارے میں، onCapabilitiesChanged — نیٹ ورک کی صلاحیتوں میں تبدیلی کے بارے میں۔
  • رجسٹریشن NetworkRequest اور کال بیک مثال کے ساتھ registerNetworkCallback کے ذریعے کی جاتی ہے۔
  • لائف سائیکل میں Activity کے لیے onStop اور Fragment کے لیے onPause میں رجسٹریشن منسوخ کرنا ضروری ہے۔
  • کیپٹیو پورٹلز کو حقیقی انٹرنیٹ تک رسائی کی تصدیق کے لیے generate_204 پر اضافی HTTP درخواست کے ذریعے سنبھالا جاتا ہے۔
  • NetworkCallback نے CONNECTIVITY_ACTION کے لیے BroadcastReceiver کو بدل دیا، جو Android 12+ پر مینی فیسٹ میں ممنوع ہے۔
  • پس منظر کے کاموں کے لیے، براہ راست NetworkCallback رجسٹریشن کے بجائے NetworkType.CONNECTED کے ساتھ WorkManager استعمال کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں