NetworkCallback: यह क्या है, अनुप्रयोग और Android में नेटवर्क हैंडलिंग

लेखक: IT Sectr प्रकाशित: 2026-03-10 पढ़ने का समय: 9 मिनट

NetworkCallback Android SDK में एक अमूर्त वर्ग है जो ConnectivityManager के माध्यम से नेटवर्क स्थिति में होने वाले परिवर्तनों की निगरानी के लिए है। Android Developers Documentation (2025) के अनुसार, NetworkCallback का उपयोग एप्लिकेशन को कनेक्शन, डिस्कनेक्शन या कनेक्शन विशेषताओं में बदलाव पर समय पर प्रतिक्रिया देने की अनुमति देता है। ConnectivityManager.NetworkCallback सिस्टम सेवा को लगातार पोल किए बिना नेटवर्क प्रकार, कैप्टिव पोर्टल और इंटरनेट खत्म होने के बारे में विस्तृत जानकारी प्रदान करता है।

मुख्य बिंदु

  • NetworkCallback Android SDK में एक अंतर्निहित अमूर्त वर्ग है जो ConnectivityManager के माध्यम से नेटवर्क स्थिति को ट्रैक करता है।
  • 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 में नेटवर्क के लिए क्या अंतर है?

BroadcastReceiver CONNECTIVITY_CHANGE के साथ बिना विवरण के और कई सेकंड तक की देरी के साथ केवल नेटवर्क परिवर्तन का तथ्य प्रदान करता है। 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें