नेटवर्क की स्थिति के बारे में जानें

Android, ऐप्लिकेशन को कनेक्टिविटी में होने वाले डाइनैमिक बदलावों के बारे में जानकारी देता है. इसका इस्तेमाल करें कनेक्टिविटी में होने वाले बदलावों को ट्रैक करने और उनका जवाब देने के लिए, इन क्लास को आज़माएं:

  • ConnectivityManager यह आपके ऐप्लिकेशन को सिस्टम में कनेक्टिविटी की स्थिति के बारे में बताता है.
  • Network क्लास इनमें से एक वे नेटवर्क जिनसे डिवाइस कनेक्ट है. Network का इस्तेमाल किया जा सकता है की मदद से नेटवर्क के बारे में जानकारी इकट्ठा की जा सकती है. ConnectivityManager या नेटवर्क पर सॉकेट बाइंड करने के लिए. जब नेटवर्क डिसकनेक्ट होने पर, Network ऑब्जेक्ट इस्तेमाल नहीं किया जा सकता. भले ही डिवाइस बाद में उसी उपकरण से फिर से कनेक्ट होता है, तो नया Network ऑब्जेक्ट नया नेटवर्क.
  • LinkProperties ऑब्जेक्ट इसमें नेटवर्क के लिंक के बारे में जानकारी होती है, जैसे कि डीएनएस की सूची सर्वर, लोकल आईपी पते, और नेटवर्क के लिए इंस्टॉल किए गए नेटवर्क रूट.
  • NetworkCapabilities ऑब्जेक्ट में नेटवर्क की प्रॉपर्टी के बारे में जानकारी होती है, जैसे कि ट्रांसपोर्ट (वाई-फ़ाई, मोबाइल, ब्लूटूथ) और नेटवर्क क्या-क्या कर सकता है. उदाहरण के लिए, ऑब्जेक्ट से क्वेरी करके यह पता लगाया जा सकता है कि नेटवर्क मल्टीमीडिया मैसेज (एमएमएस) भेजने की सुविधा नहीं है. इसके अलावा, कैप्टिव पोर्टल के पीछे है या जिसके पास सीमित डेटा है.

ऐसे ऐप्लिकेशन जिन्हें तुरंत कनेक्टिविटी की स्थिति में दिलचस्पी होती है, वे नेटवर्क किस तरह का है, यह जानने के लिए ConnectivityManager तरीकों को कॉल करें उपलब्ध हैं. ये तरीके डीबग करने में मददगार होते हैं. साथ ही, कभी-कभी किसी भी समय उपलब्ध कनेक्टिविटी का स्नैपशॉट.

हालांकि, सिंक्रोनस ConnectivityManager तरीकों से, आपके ऐप्लिकेशन को होने वाली किसी भी गतिविधि के बारे में नहीं बताया जाता ताकि वे आपको अपना यूज़र इंटरफ़ेस (यूआई) अपडेट न करने दें. ये लोग, ऐप्लिकेशन में बदलाव भी नहीं कर सकते नेटवर्क के डिसकनेक्ट होने या नेटवर्क की क्षमता के हिसाब से काम करने का तरीका बदलें.

कनेक्टिविटी किसी भी समय बदल सकती है और ज़्यादातर ऐप्लिकेशन के लिए डिवाइस पर नेटवर्किंग की स्थिति का हमेशा ताज़ा, अप-टू-डेट व्यू. ऐप्लिकेशन ये काम कर सकते हैं ConnectivityManager के साथ कॉलबैक रजिस्टर करें, ताकि इसकी सूचना दी जा सके कि ऐप परवाह है. कॉलबैक का इस्तेमाल करके, आपका ऐप्लिकेशन किसी महंगे पोलिंग का इस्तेमाल किए बिना, कनेक्टिविटी में बदलाव ला सकते हैं हो सकता है कि वे तेज़ी से अपडेट न हो पाएं.

NetworkCallback और इसके बारे में पता लगाने के दूसरे तरीकों का इस्तेमाल करके डिवाइस की कनेक्टिविटी स्थिति के लिए किसी खास अनुमति की ज़रूरत नहीं है. हालांकि, कुछ नेटवर्क पर खास अनुमतियां लागू होती हैं. इसके लिए उदाहरण के लिए, कुछ ऐसे प्रतिबंधित नेटवर्क हो सकते हैं जो ऐप्लिकेशन के लिए उपलब्ध न हों. किसी बैकग्राउंड नेटवर्क के लिए, CHANGE_NETWORK_STATE अनुमति की ज़रूरत होती है. और कुछ कॉल चलाने के लिए खास अनुमतियों की ज़रूरत पड़ सकती है. खास जानकारी देखें विवरण के लिए प्रत्येक कॉल के लिए दस्तावेज़.

तात्कालिक स्थिति पाएं

Android पर चलने वाला डिवाइस, एक साथ कई कनेक्शन बनाए रख सकता है. नेटवर्क की मौजूदा स्थिति के बारे में जानकारी पाने के लिए, सबसे पहले ConnectivityManager का एक इंस्टेंस:

Kotlin

val connectivityManager = getSystemService(ConnectivityManager::class.java)

Java

ConnectivityManager connectivityManager = getSystemService(ConnectivityManager.class);

इसके बाद, इस इंस्टेंस का इस्तेमाल अपने ऐप्लिकेशन:

Kotlin

val currentNetwork = connectivityManager.getActiveNetwork()

Java

Network currentNetwork = connectivityManager.getActiveNetwork();

नेटवर्क के रेफ़रंस के साथ, आपका ऐप्लिकेशन उसके बारे में जानकारी मांग सकता है:

Kotlin

val caps = connectivityManager.getNetworkCapabilities(currentNetwork)
val linkProperties = connectivityManager.getLinkProperties(currentNetwork)

Java

NetworkCapabilities caps = connectivityManager.getNetworkCapabilities(currentNetwork);
LinkProperties linkProperties = connectivityManager.getLinkProperties(currentNetwork);

ज़्यादा काम की सुविधाओं के लिए, NetworkCallback. नेटवर्क कॉलबैक रजिस्टर करने के बारे में ज़्यादा जानने के लिए, यहां देखें नेटवर्क के इवेंट सुनें.

NetworkCapabilities और LinkProperties

NetworkCapabilities और LinkProperties ऑब्जेक्ट इसके बारे में जानकारी देते हैं सिस्टम को नेटवर्क के बारे में सभी एट्रिब्यूट की जानकारी है.

LinkProperties ऑब्जेक्ट को रूट, लिंक के पतों, इंटरफ़ेस नाम, प्रॉक्सी जानकारी (अगर कोई भी) और डीएनएस सर्वर का इस्तेमाल करना. LinkProperties ऑब्जेक्ट पर सही तरीके को कॉल करें ताकि आपको अपने काम की जानकारी वापस मिल सके.

NetworkCapabilities ऑब्जेक्ट इसमें नेटवर्क ट्रांसपोर्ट और उनकी क्षमताओं के बारे में जानकारी शामिल होती है.

ट्रांसपोर्ट, फ़िज़िकल मीडियम का एक ऐब्स्ट्रैक्ट है, जिस पर कोई नेटवर्क काम करता है. ट्रांसपोर्ट के सामान्य उदाहरण ईथरनेट, वाई-फ़ाई, और मोबाइल हैं. वीपीएन और पीयर-टू-पीयर वाई-फ़ाई भी ट्रांसपोर्ट हो सकते हैं. Android पर, एक नेटवर्क में एक समय पर कई ट्रांसपोर्ट हो सकते हैं. एक उदाहरण यह एक वीपीएन है, जो वाई-फ़ाई और मोबाइल नेटवर्क, दोनों पर काम करता है. वीपीएन में वाई-फ़ाई, मोबाइल, और वीपीएन सेवा. यह पता लगाने के लिए कि क्या नेटवर्क का कोई परिवहन है, तो NetworkCapabilities.hasTransport(int) NetworkCapabilities.TRANSPORT_* कॉन्सटेंट में से किसी एक का इस्तेमाल करें.

क्षमता, नेटवर्क की प्रॉपर्टी के बारे में बताती है. सुविधाओं के उदाहरण MMS, NOT_METERED, और INTERNET. मल्टीमीडिया मैसेज (एमएमएस) क्षमता वाला नेटवर्क भेज सकता है और इसके बिना मल्टीमीडिया मैसेजिंग सेवा मैसेज और नेटवर्क पा सकता है की क्षमता नहीं हो सकती. NOT_METERED क्षमता वाला नेटवर्क उपयोगकर्ता से जुड़ा है. आपका ऐप्लिकेशन, NetworkCapabilities.hasCapability(int) NetworkCapabilities.NET_CAPABILITY_* कॉन्सटेंट में से किसी एक का इस्तेमाल करें.

सबसे ज़्यादा काम के NET_CAPABILITY_* कॉन्सटेंट में ये शामिल हैं:

  • NET_CAPABILITY_INTERNET: बताता है कि नेटवर्क सेट अप किया गया है को ऐक्सेस किया जा सकता है. यह सेटअप के बारे में है, असल में ऐसा नहीं है कोचिंग नहीं दी जा सकती. उदाहरण के लिए, इंटरनेट को ऐक्सेस किया जा सकता है, लेकिन आपको कैप्टिव पोर्टल पर निर्भर रहना होगा.

    किसी मोबाइल और इंटरनेट सेवा देने वाली कंपनी के मोबाइल नेटवर्क में, आम तौर पर INTERNET की सुविधा होती है. हालांकि, स्थानीय P2P वाई-फ़ाई नेटवर्क आम तौर पर काम नहीं करता. असल कनेक्टिविटी के लिए, देखें NET_CAPABILITY_VALIDATED.

  • NET_CAPABILITY_NOT_METERED: इससे पता चलता है कि नेटवर्क पर डेटा की सीमा तय नहीं है. नेटवर्क है इसे तब सीमित डेटा की कैटगरी में रखा जाता है, जब उपयोगकर्ता उस डिवाइस पर बहुत ज़्यादा डेटा खर्च करने के बारे में संवेदनशील हो पैसों, डेटा की सीमाओं या बैटरी की परफ़ॉर्मेंस की वजह से कनेक्शन नहीं हो सका समस्याएं.

  • NET_CAPABILITY_NOT_VPN: इससे पता चलता है कि नेटवर्क, वर्चुअल प्राइवेट नेटवर्क नहीं है.

  • NET_CAPABILITY_VALIDATED: इससे पता चलता है कि नेटवर्क असल ऐक्सेस देता है सार्वजनिक इंटरनेट को कितना नुकसान पहुंचा सकता है. बंदी बनाए गए लोगों का नेटवर्क पोर्टल या ऐसे नेटवर्क में उपलब्ध नहीं है जो डोमेन नेम का रिज़ॉल्यूशन उपलब्ध नहीं कराता यह क्षमता. यह सबसे नज़दीक है, जिसे सिस्टम किसी नेटवर्क के बारे में बता सकता है असल में ऐक्सेस उपलब्ध कराता है. हालांकि, पुष्टि किया गया नेटवर्क अब भी उन्हें आईपी के हिसाब से फ़िल्टर किया जाना चाहिए या कनेक्टिविटी खराब है.

  • NET_CAPABILITY_CAPTIVE_PORTAL: यह बताता है कि नेटवर्क में कैप्टिव पोर्टल है.

कुछ और सुविधाएं भी हैं, जिनमें खास ऐप्लिकेशन की दिलचस्पी हो सकती है. ज़्यादा जानकारी के लिए, NetworkCapabilities.hasCapability(int).

नेटवर्क की क्षमताएं किसी भी समय बदल सकती हैं. जब सिस्टम किसी कैप्टिव पोर्टल, उपयोगकर्ता को लॉग इन करने के लिए आमंत्रित करने वाली एक सूचना दिखाता है. हालांकि, यह चालू है, नेटवर्क में NET_CAPABILITY_INTERNET और NET_CAPABILITY_CAPTIVE_PORTAL सुविधाएं मिलती हैं, लेकिन NET_CAPABILITY_VALIDATED की सुविधा.

जब उपयोगकर्ता कोई कार्रवाई करता है और कैप्टिव पोर्टल पेज, डिवाइस सार्वजनिक इंटरनेट को ऐक्सेस कर पाएगा और नेटवर्क NET_CAPABILITY_VALIDATED की क्षमता हासिल कर लेता है और NET_CAPABILITY_CAPTIVE_PORTAL की क्षमता.

इसी तरह, किसी नेटवर्क का ट्रांसपोर्ट भी डाइनैमिक तौर पर बदल सकता है. उदाहरण के लिए, वीपीएन इस्तेमाल करने के लिए खुद को फिर से कॉन्फ़िगर कर सकता है अभी-अभी आया एक तेज़ नेटवर्क, जैसे मोबाइल से वाई-फ़ाई पर स्विच करना भी शामिल हो सकता है. इस स्थिति में, नेटवर्क TRANSPORT_CELLULAR को खो देता है TRANSPORT_WIFI ट्रांसपोर्ट और उसे हासिल कर लेता है. साथ ही, TRANSPORT_VPN परिवहन.

नेटवर्क के इवेंट सुनें

नेटवर्क इवेंट के बारे में जानने के लिए, NetworkCallback क्लास टुगेदर ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback) और ConnectivityManager.registerNetworkCallback(NetworkCallback). ये दोनों तरीके अलग-अलग के मकसद से बनाया गया है.

सभी Android ऐप्लिकेशन का एक डिफ़ॉल्ट नेटवर्क होता है, जिसे सिस्टम तय करता है. आम तौर पर, यह सिस्टम ऐसे नेटवर्क को प्राथमिकता देता है जिनका डेटा इस्तेमाल करने की सीमा तय नहीं होती सीमित किए गए नेटवर्क और धीमी गति वाले नेटवर्क पर तेज़ स्पीड वाले नेटवर्क.

जब कोई ऐप्लिकेशन नेटवर्क का अनुरोध करता है, जैसे कि HttpsURLConnection, सिस्टम, डिफ़ॉल्ट नेटवर्क का इस्तेमाल करके इस अनुरोध पर कार्रवाई करता है. ऐप्लिकेशन ट्रैफ़िक भेज सकते हैं दूसरे नेटवर्क पर भी करता है. और जानकारी के लिए, अतिरिक्त नेटवर्क.

डिफ़ॉल्ट नेटवर्क के रूप में सेट किया गया नेटवर्क, कितने समय तक काम करता है. आम तौर पर यह उदाहरण होता है कि डिवाइस इतनी रेंज में आता है ऐसा वाई-फ़ाई ऐक्सेस पॉइंट जो मोबाइल से ज़्यादा तेज़ है. कॉन्टेंट बनाने डिवाइस इस ऐक्सेस पॉइंट से कनेक्ट करता है और सभी के लिए डिफ़ॉल्ट नेटवर्क स्विच करता है नए वाई-फ़ाई नेटवर्क के लिए ऐप्लिकेशन.

किसी नए नेटवर्क के डिफ़ॉल्ट होने पर, ऐप्लिकेशन खुलने वाले किसी भी नए कनेक्शन का इस्तेमाल करता है यह नेटवर्क. बाद में, पिछले डिवाइस पर बाकी सभी कनेक्शन डिफ़ॉल्ट नेटवर्क को ज़बरदस्ती बंद किया जाता है. अगर ऐप्लिकेशन के लिए ज़रूरी हो कि डिफ़ॉल्ट नेटवर्क में बदलाव होने पर, यह डिफ़ॉल्ट नेटवर्क को रजिस्टर करता है कॉलबैक इस तरह करें:

Kotlin

connectivityManager.registerDefaultNetworkCallback(object : ConnectivityManager.NetworkCallback() {
    override fun onAvailable(network : Network) {
        Log.e(TAG, "The default network is now: " + network)
    }

    override fun onLost(network : Network) {
        Log.e(TAG, "The application no longer has a default network. The last default network was " + network)
    }

    override fun onCapabilitiesChanged(network : Network, networkCapabilities : NetworkCapabilities) {
        Log.e(TAG, "The default network changed capabilities: " + networkCapabilities)
    }

    override fun onLinkPropertiesChanged(network : Network, linkProperties : LinkProperties) {
        Log.e(TAG, "The default network changed link properties: " + linkProperties)
    }
})

Java

connectivityManager.registerDefaultNetworkCallback(new ConnectivityManager.NetworkCallback() {
    @Override
    public void onAvailable(Network network) {
        Log.e(TAG, "The default network is now: " + network);
    }

    @Override
    public void onLost(Network network) {
        Log.e(TAG, "The application no longer has a default network. The last default network was " + network);
    }

    @Override
    public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
        Log.e(TAG, "The default network changed capabilities: " + networkCapabilities);
    }

    @Override
    public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
        Log.e(TAG, "The default network changed link properties: " + linkProperties);
    }
});

किसी नए नेटवर्क के डिफ़ॉल्ट नेटवर्क के तौर पर सेट होने पर, ऐप्लिकेशन को onAvailable(Network) पर जाकर संपर्क फ़ॉर्म भरें और उसमें दूसरे साइट की जानकारी शामिल करें. लागू करना onCapabilitiesChanged(Network,NetworkCapabilities) onLinkPropertiesChanged(Network,LinkProperties), या दोनों, कनेक्टिविटी में आने वाले बदलावों पर उचित प्रतिक्रिया दे सकें.

registerDefaultNetworkCallback(), onLost() पर रजिस्टर किए गए कॉलबैक के लिए इसका मतलब है कि नेटवर्क ने डिफ़ॉल्ट नेटवर्क होने का स्टेटस खो दिया है. शायद यह डिसकनेक्ट हो गया है.

हालांकि, आपके पास उन ट्रांसपोर्ट के बारे में जानने का विकल्प होता है जिनका इस्तेमाल डिफ़ॉल्ट नेटवर्क करता है क्वेरी की जा रही है NetworkCapabilities.hasTransport(int) यह नेटवर्क की बैंडविथ या सीमित डेटा के लिए एक खराब प्रॉक्सी है. आपका ऐप्लिकेशन यह नहीं मान सकता कि वाई-फ़ाई हमेशा बेहतर होता है और यह हमेशा बेहतर बैंडविथ उपलब्ध कराता है है.

इसके बजाय, इस्तेमाल करें NetworkCapabilities.getLinkDownstreamBandwidthKbps() को मापा जा सकता है, और NetworkCapabilites.hasCapability(int) के साथ NET_CAPABILITY_NOT_METERED मीटरेडनेस को तय करने के लिए आर्ग्युमेंट. ज़्यादा जानकारी के लिए, NetworkCapabilities और LinkProperties.

डिफ़ॉल्ट रूप से, कॉलबैक मैथड को इसके कनेक्टिविटी थ्रेड पर कॉल किया जाता है आपका ऐप्लिकेशन, जो ConnectivityManager के ज़रिए इस्तेमाल किया जाने वाला एक अलग थ्रेड है. अगर आपके कॉलबैक लागू करने के बाद और काम करना होगा, तो उन्हें इस वैरिएंट का इस्तेमाल करके वर्कर थ्रेड को अलग करें ConnectivityManager.registerDefaultNetworkCallback(NetworkCallback, Handler).

अगर आपको कॉलबैक का कोई इस्तेमाल नहीं करना है, तो इस नंबर पर कॉल करके, अपने कॉलबैक का रजिस्ट्रेशन रद्द करें ConnectivityManager.unregisterNetworkCallback(NetworkCallback). आपकी मुख्य गतिविधि onPause() यह करने के लिए एक अच्छी जगह है, खासकर तब, जब आप कॉलबैक को onResume().

अन्य नेटवर्क

डिफ़ॉल्ट नेटवर्क ही ज़्यादातर ऐप्लिकेशन के लिए काम का नेटवर्क होता है. हालांकि, कुछ ऐप्लिकेशन के लिए सिर्फ़ डिफ़ॉल्ट नेटवर्क ही काम का होता है देखें अन्य उपलब्ध नेटवर्क में दिलचस्पी हो सकती है. इनके बारे में जानने के लिए, ऐप्लिकेशन NetworkRequest को उसकी कॉल और ज़रूरत के समय ConnectivityManager.registerNetworkCallback(NetworkRequest, NetworkCallback).

यह प्रोसेस, संगीत सुनने के को डिफ़ॉल्ट नेटवर्क पर सेट कर दें. हालांकि, हालांकि, ऐसी कोई एक डिफ़ॉल्ट नेटवर्क है जो ऐप पर किसी भी समय लागू होता है. इस वर्शन में आपको ऐप एक साथ सभी उपलब्ध नेटवर्क को देख सकता है, इसलिए onLost(Network) का मतलब है कि नेटवर्क अच्छे से डिसकनेक्ट हो गया है, न कि यह डिफ़ॉल्ट नहीं है अब.

यह ऐप्लिकेशन, ConnectivityManager को जानकारी देने के लिए NetworkRequest बनाता है कि वे किस तरह के हैं को सुनना चाहता है. नीचे दिए गए उदाहरण में बताया गया है कि उस ऐप्लिकेशन के लिए NetworkRequest जो सिर्फ़ मीटर न किए जाने वाले इंटरनेट में रुचि रखता है कनेक्शन:

Kotlin

val request = NetworkRequest.Builder()
  .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
  .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
  .build()

connectivityManager.registerNetworkCallback(request, myNetworkCallback)

Java

NetworkRequest request = new NetworkRequest.Builder()
  .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
  .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
  .build();

connectivityManager.registerNetworkCallback(request, myNetworkCallback);

इसका मतलब है कि ऐप्लिकेशन को, बिना डेटा सीमा वाले किसी भी बदलाव की जानकारी मिलती है पर मौजूद नेटवर्क.

डिफ़ॉल्ट नेटवर्क कॉलबैक की तरह ही, इसमें registerNetworkCallback(NetworkRequest, NetworkCallback, Handler) जो Handler को स्वीकार करता है, ताकि वह आपकेConnectivity है.

कॉल करें ConnectivityManager.unregisterNetworkCallback(NetworkCallback) जब कॉलबैक अब काम का न हो. कोई ऐप्लिकेशन एक साथ रजिस्टर कर सकता है कई नेटवर्क कॉलबैक.

सुविधा के लिए, NetworkRequest ऑब्जेक्ट में ज़्यादातर ऐप्लिकेशन को जिन सामान्य सुविधाओं की ज़रूरत होती है, वे नीचे दी गई हैं:

अपना ऐप्लिकेशन लिखते समय, डिफ़ॉल्ट जांच करके देखें कि वे डिफ़ॉल्ट सेटिंग से मेल खाते हैं या नहीं इस्तेमाल का उदाहरण. साथ ही, अगर आपको अपने ऐप्लिकेशन को नेटवर्क के बारे में सूचना देनी है, तो इन्हें हटाएं जिनमें ये क्षमता नहीं होती है. दूसरी ओर, जोड़ें में उपलब्ध नेटवर्क में किसी भी तरह के कनेक्टिविटी बदलाव के लिए कॉल न की जा सके आपका ऐप्लिकेशन, इंटरैक्ट नहीं करता.

उदाहरण के लिए, अगर आपके ऐप्लिकेशन को मल्टीमीडिया मैसेज (एमएमएस) भेजने की ज़रूरत है, तो NET_CAPABILITY_MMS NetworkRequest को बताएं, ताकि आपको उन सभी नेटवर्क के बारे में न बताया जाए जो मल्टीमीडिया मैसेज (एमएमएस) भेजने के लिए. जोड़ें TRANSPORT_WIFI_AWARE अगर आपके ऐप्लिकेशन की दिलचस्पी सिर्फ़ P2P वाई-फ़ाई कनेक्टिविटी में है. NET_CAPABILITY_INTERNET और NET_CAPABILITY_VALIDATED अगर आपको सर्वर से डेटा ट्रांसफ़र करने में दिलचस्पी है, तो ये मददगार साबित हो सकते हैं के बारे में बात करते हैं.

कॉलबैक सीक्वेंस का सैंपल

इस सेक्शन में बताया गया है कि किसी ऐप्लिकेशन को कॉलबैक करने पर, वह किस क्रम में वापस आ सकता है जो डिवाइस पर डिफ़ॉल्ट कॉलबैक और सामान्य कॉलबैक, दोनों को रजिस्टर करता है में मोबाइल कनेक्टिविटी है. इस उदाहरण में, डिवाइस अच्छा वाई-फ़ाई ऐक्सेस पॉइंट है, जो उससे डिसकनेक्ट हो जाता है. उदाहरण में यह भी माना गया है कि डिवाइस में मोबाइल डेटा हमेशा चालू रखें सेटिंग चालू रहती है.

समयावधि नीचे दी गई है:

  1. जब ऐप्लिकेशन registerNetworkCallback() को कॉल करता है, तो कॉलबैक तुरंत हो जाता है onAvailable(), onNetworkCapabilitiesChanged(), और मोबाइल नेटवर्क के लिए onLinkPropertiesChanged(), क्योंकि सिर्फ़ नेटवर्क उपलब्ध है. अगर कोई दूसरा नेटवर्क उपलब्ध है, तो ऐप्लिकेशन दूसरे नेटवर्क के लिए भी कॉलबैक मिलते हैं.


    रजिस्टर किए गए नेटवर्क के कॉलबैक इवेंट और इवेंट से ट्रिगर हुए कॉलबैक को दिखाने वाला स्टेट डायग्राम पहली इमेज. registerNetworkCallback() पर कॉल करने के बाद, ऐप्लिकेशन की स्थिति.

  2. इसके बाद, ऐप्लिकेशन registerDefaultNetworkCallback() को कॉल करता है. डिफ़ॉल्ट नेटवर्क कॉलबैक से onAvailable() पर कॉल आने लगेंगे, onNetworkCapabilitiesChanged(), और onLinkPropertiesChanged() मोबाइल नेटवर्क, क्योंकि मोबाइल नेटवर्क डिफ़ॉल्ट नेटवर्क है. अगर आपने दूसरा, ऐसा नेटवर्क चालू है जो डिफ़ॉल्ट नहीं है, इसलिए ऐप्लिकेशन उस नेटवर्क के लिए कॉल करता है जो डिफ़ॉल्ट नहीं है.


    स्टेट डायग्राम में, डिफ़ॉल्ट नेटवर्क कॉलबैक इवेंट और
इवेंट से ट्रिगर किए गए कॉलबैक दूसरी इमेज. डिफ़ॉल्ट नेटवर्क रजिस्टर करने के बाद ऐप्लिकेशन की स्थिति.

  3. बाद में, डिवाइस (बिना मीटर वाले) वाई-फ़ाई नेटवर्क से कनेक्ट हो जाता है. रेगुलर नेटवर्क कॉलबैक से onAvailable() पर कॉल आते हैं, onNetworkCapabilitiesChanged(), और onLinkPropertiesChanged() वाई-फ़ाई नेटवर्क.


    स्टेटस का डायग्राम, जिसमें ऐप्लिकेशन के किसी डिवाइस से कनेक्ट होने पर ट्रिगर होने वाले कॉलबैक दिखाए गए हैं
नया नेटवर्क तीसरी इमेज. किसी ऐसे वाई-फ़ाई नेटवर्क से कनेक्ट होने के बाद ऐप्लिकेशन की स्थिति जिसमें डेटा न हो.

  4. इस समय, हो सकता है कि वाई-फ़ाई नेटवर्क को पुष्टि करने में कुछ समय लगे. तय सीमा में इस मामले में, onNetworkCapabilitiesChanged() सामान्य नेटवर्क के लिए कॉल करता है कॉलबैक में NET_CAPABILITY_VALIDATED क्षमता शामिल नहीं होती. एक बहुत कम समय के लिए, onNetworkCapabilitiesChanged() पर एक कॉल आता है, जहां नई सुविधाओं में NET_CAPABILITY_VALIDATED शामिल हैं. ज़्यादातर मामलों में, पुष्टि बहुत जल्दी हो जाती है.

    वाई-फ़ाई नेटवर्क की पुष्टि होने के बाद, सिस्टम इसे मोबाइल पर प्राथमिकता देगा ऐसा इसलिए, क्योंकि नेटवर्क पर डेटा उपलब्ध नहीं है. वह वाई-फ़ाई नेटवर्क बन जाता है डिफ़ॉल्ट नेटवर्क, इसलिए डिफ़ॉल्ट नेटवर्क कॉलबैक को onAvailable(), onNetworkCapabilitiesChanged(), और वाई-फ़ाई नेटवर्क के लिए onLinkPropertiesChanged(). मोबाइल नेटवर्क चालू हो गया और सामान्य नेटवर्क कॉलबैक को मोबाइल नेटवर्क के लिए onLosing().

    इस उदाहरण में यह माना गया है कि इस डिवाइस के लिए मोबाइल डेटा हमेशा चालू रहता है. इसलिए, मोबाइल नेटवर्क कभी भी डिसकनेक्ट नहीं होता. अगर यह सेटिंग बंद है, तो मोबाइल नेटवर्क के डिसकनेक्ट होने पर और सामान्य नेटवर्क कॉलबैक onLost() पर कॉल आता है.


    वाई-फ़ाई नेटवर्क के ट्रिगर होने पर ट्रिगर होने वाले कॉलबैक को दिखाने वाला स्टेट डायग्राम
कनेक्शन की पुष्टि चौथी इमेज. वाई-फ़ाई नेटवर्क की पुष्टि होने के बाद, ऐप्लिकेशन की स्थिति.

  5. बाद में, डिवाइस बंद होने की वजह से वह अचानक वाई-फ़ाई से डिसकनेक्ट हो जाता है सीमा के अंदर. वाई-फ़ाई डिसकनेक्ट होने की वजह से, सामान्य नेटवर्क कॉलबैक मिलता है वाई-फ़ाई के लिए onLost() पर कॉल करें. मोबाइल नया डिफ़ॉल्ट नेटवर्क है, इसलिए डिफ़ॉल्ट नेटवर्क कॉलबैक को onAvailable() पर कॉल मिलते हैं, onNetworkCapabilitiesChanged(), और onLinkPropertiesChanged() मोबाइल नेटवर्क.


    वाई-फ़ाई नेटवर्क के ट्रिगर होने पर ट्रिगर होने वाले कॉलबैक को दिखाने वाला स्टेट डायग्राम
कनेक्शन टूट गया पांचवीं इमेज. वाई-फ़ाई नेटवर्क से डिसकनेक्ट करने के बाद, ऐप्लिकेशन की स्थिति.

अगर मोबाइल डेटा हमेशा चालू रखें सेटिंग बंद है, तो वाई-फ़ाई से कनेक्ट होने पर डिवाइस को मोबाइल नेटवर्क से फिर से कनेक्ट करने की कोशिश करता है. तस्वीर है हां, लेकिन onAvailable() कॉल के लिए कुछ और देरी से और सामान्य नेटवर्क कॉलबैक को onAvailable() पर भी कॉल आते हैं, onNetworkCapabilitiesChanged(), और onLinkPropertiesChanged(), क्योंकि मोबाइल उपलब्ध हो जाता है.

डेटा ट्रांसफ़र के लिए नेटवर्क के इस्तेमाल पर लगी पाबंदियां

नेटवर्क कॉलबैक वाले नेटवर्क को देखने का मतलब यह नहीं है कि आपका ऐप्लिकेशन ये काम कर सकता है डेटा ट्रांसफ़र के लिए नेटवर्क का इस्तेमाल करना. कुछ नेटवर्क, इंटरनेट की सुविधा नहीं देते और कुछ नेटवर्क इन तक सीमित हो सकते हैं खास अधिकार वाले ऐप्लिकेशन. इंटरनेट कनेक्टिविटी की जांच करने के लिए, देखें NET_CAPABILITY_INTERNET और NET_CAPABILITY_VALIDATED.

बैकग्राउंड नेटवर्क का इस्तेमाल, अनुमति की जांच पर भी निर्भर करता है. अगर आपका ऐप्लिकेशन बैकग्राउंड नेटवर्क का इस्तेमाल करना चाहता है, तो उसे CHANGE_NETWORK_STATE अनुमति.

जिन ऐप्लिकेशन के पास यह अनुमति है वे सिस्टम को कोई ऐसा नेटवर्क लाने के लिए जो उपलब्ध नहीं है, जैसे मोबाइल नेटवर्क जब डिवाइस किसी वाई-फ़ाई नेटवर्क से कनेक्ट होता है. ऐसे ऐप्लिकेशन कॉल ConnectivityManager.requestNetwork(NetworkRequest, NetworkCallback) NetworkCallback के साथ कॉल करने के लिए कहें.