नेटवर्क चुनना

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

नेटवर्क चुनने का व्यवहार

इस सेक्शन में, Android 12 या उसके बाद के वर्शन वाले डिवाइसों और Android 11 और उससे पहले के वर्शन वाले डिवाइसों के लिए, नेटवर्क चुनने के तरीके के बारे में बताया गया है.

Android 12

Android 12 या इसके बाद के वर्शन वाले डिवाइसों के लिए, Android उपलब्ध नेटवर्क में से किसी एक को चुनने के लिए, NetworkScore क्लास का इस्तेमाल करता है. इस क्लास में ऐसे कई फ़्लैग शामिल हैं जो नीति से जुड़े फ़ैसले लेने के लिए ज़रूरी हैं. हर फ़्लैग मतलब के तौर पर उस नेटवर्क के एट्रिब्यूट को दिखाता है जो नेटवर्क चुनने के लिए ज़रूरी होता है.

नेटवर्क एजेंट (NetworkAgent) POLICY_TRANSPORT_PRIMARY फ़्लैग का इस्तेमाल करके यह बताता है कि एक ही ट्रांसपोर्ट के एक से ज़्यादा नेटवर्क होने पर उस नेटवर्क को प्राथमिकता दी जाती है. इसका एक उदाहरण, ड्यूअल सिम वाला डिवाइस है. इसमें सेटिंग में एक स्विच होता है, जिससे उपयोगकर्ता यह चुन सकता है कि डिफ़ॉल्ट रूप से किस सिम कार्ड का इस्तेमाल करना है. किसी ट्रांसपोर्ट में, Android उस नेटवर्क को प्राथमिकता देता है जिस पर POLICY_TRANSPORT_PRIMARY वाला फ़्लैग लगा हो.

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

NetworkScore क्लास, नेटवर्क एजेंट को यह एलान करने की भी अनुमति देती है कि KEEP_CONNECTED_FOR_HANDOVER फ़्लैग और NetworkScore.Builder.setKeepConnectedReason तरीके का इस्तेमाल करके, नेटवर्क को चालू रखा गया है. यह KEEP_CONNECTED_FOR_HANDOVER फ़्लैग, संभावित नेटवर्क के लिए काम का है. इसकी मदद से, नेटवर्क एजेंट, दूसरे वाई-फ़ाई एसटीए पर नेटवर्क को ला सकता है. इसके लिए, नेटवर्क की परफ़ॉर्मेंस का आकलन होने तक उसे मुख्य नेटवर्क के तौर पर सेट नहीं किया जाता. अगर कोई नेटवर्क एजेंट इस फ़्लैग का एलान नहीं करता है, तो एजेंट को नेटवर्क की परफ़ॉर्मेंस का आकलन करने का मौका मिलने से पहले ही, संभावित नेटवर्क को किसी भी अनुरोध को पूरा न करने की वजह से हटा दिया जाता है.

अगर कोई अनुरोध दो नेटवर्क पर दिखाया जा सकता है और नीति के हिसाब से दोनों नेटवर्क एक जैसे हैं, तो विकल्प के तौर पर उस नेटवर्क को चुना जाता है जो फ़िलहाल अनुरोध दिखा रहा है. अगर कोई नेटवर्क अनुरोध को पूरा नहीं कर रहा है, तो यह दोनों में से किसी एक को चुनता है. इसके बाद, नीति के फ़्लैग बदलने तक इस नेटवर्क को प्राथमिकता दी जाती है.

नेटवर्क चुनने की सुविधा, AOSP में कनेक्टिविटी मॉड्यूल में लागू की गई है. नेटवर्क चुनने से जुड़ी नीति का लॉजिक, NetworkRanker क्लास और इसकी हेल्पर क्लास में मिलता है. इसका मतलब है कि डिवाइस बनाने वाली कंपनियां, नेटवर्क चुनने के कोड को सीधे तौर पर पसंद के मुताबिक नहीं बना सकतीं. इसके बजाय, उन्हें नेटवर्क के बारे में ज़रूरी जानकारी देने के लिए, NetworkScore में फ़्लैग का इस्तेमाल करना होगा.

Android 11

Android 11 या इससे पहले के वर्शन वाले डिवाइसों के लिए, Android नेटवर्क एजेंट (NetworkAgent) के लागू होने से भेजे गए साधारण पूर्णांक के आधार पर नेटवर्क चुनता है. हर अनुरोध के लिए, Android सबसे ज़्यादा अंकों वाले उस नेटवर्क को चुनता है जो अनुरोध को पूरा कर सकता है. अंकों वाले इस स्कोर में नेटवर्क एजेंट की ओर से भेजे गए पूर्णांक के साथ-साथ नेटवर्क की पुष्टि की गई या नेटवर्क एक वीपीएन है या नहीं, जैसी स्थितियों के आधार पर दिए गए अतिरिक्त बोनस या जुर्माने शामिल होते हैं. नीति से जुड़े फ़ैसले लेने के लिए, अलग-अलग नेटवर्क एजेंट एक-दूसरे के साथ सिंक होते हैं.

अगर दो नेटवर्क किसी अनुरोध को दिखा सकते हैं और उनका नंबर स्कोर एक ही है, तो व्यवहार तय नहीं होता.

NetworkScore क्लास

नेटवर्क चुनने की सुविधा के लिए मुख्य क्लास, NetworkScore है. इस क्लास में, उपलब्ध फ़्लैग और setKeepConnectedReason के तरीके का एपीआई और दस्तावेज़ शामिल हैं.

NetworkScore क्लास को उसकी बिल्डर क्लास के ज़रिए बनाया जाना चाहिए. साथ ही, शुरू करने पर, उसे NetworkAgent कंस्ट्रक्टर को पास किया जाना चाहिए. NetworkAgent#sendNetworkScore तरीके का इस्तेमाल करके, नेटवर्क के स्कोर किसी भी समय अपडेट किए जा सकते हैं.

नेटवर्क एजेंट लागू करने के उदाहरण

AOSP में, अलग-अलग नेटवर्क एजेंट को लागू करने के उदाहरण शामिल हैं. यहां इसे लागू करने के उदाहरण दिए गए हैं:

  • TelephonyNetworkAgent: मोबाइल नेटवर्क के लिए नीति के बारे में बताने के लिए, नेटवर्क स्कोर का इस्तेमाल करता है
  • ClientModeImpl.WifiNetworkAgent: वाई-फ़ाई नेटवर्क के लिए नीति के बारे में बताने के लिए, नेटवर्क स्कोर का इस्तेमाल करता है. इस लागू करने के तरीके में, POLICY_EXITING फ़्लैग का इस्तेमाल करके नेटवर्क स्कोर के लिए, लेगसी इंटिजर के साथ बैकवर्ड कम्पैटिबिलिटी शामिल है.

Android 12 पर अपग्रेड किए जा रहे डिवाइस

डिवाइस बनाने वाली कंपनियों को अपने डिवाइसों को Android 12 पर अपग्रेड करने के लिए, NetworkScore क्लास का इस्तेमाल करना होगा. इसके लिए, उन्हें अपने नेटवर्क एजेंट के लागू होने के तरीके में बदलाव करना होगा. Android 11 या इससे पहले के वर्शन में इस्तेमाल किए गए लेगसी इंटिजर को NetworkScore में पास किया जाता है. हालांकि, Android 12 में इसका इस्तेमाल सिर्फ़ लॉगिंग और नॉन-रिग्रेशन के लिए किया जाता है. Android 12 में, डिवाइस बनाने वाली कंपनियों को NetworkScore फ़्लैग का इस्तेमाल करके, अपने डिवाइसों में किए जाने वाले बदलावों के बारे में बताना होगा. इसके बाद, कनेक्टिविटी मेनलाइन मॉड्यूल, नेटवर्क चुनने का फ़ैसला लेने के लिए फ़्लैग का इस्तेमाल करता है. Android 11 या इससे पहले के वर्शन के लिए कोड का इस्तेमाल करने वाले डिवाइस बनाने वाली कंपनियों को, बिल्ड में गड़बड़ियां हो सकती हैं. क्योंकि, लेगसी पूर्णांक को अपडेट करने के तरीकों को Android 12 से हटा दिया गया था.

इंटरनल NetworkFactory क्लास का इस्तेमाल करने वाले नेटवर्क एजेंट को, अपने स्कोर फ़िल्टर को NetworkScore ऑब्जेक्ट में दिखाना होगा. यह ऑब्जेक्ट, फ़ैक्ट्री के बनाए जा सकने वाले नेटवर्क के सबसे बेहतर स्कोर को दिखाता है. ऐसा इसलिए किया गया, क्योंकि Android 12 में NetworkFactory क्लास सिर्फ़ ऐसे अनुरोध पास करती है जो Android 11 और उससे पहले के वर्शन में किए गए सभी अनुरोधों के बजाय, NetworkFactory पर एलान किए गए स्कोर फ़िल्टर से मैच करते हैं.

हमारा सुझाव है कि आसानी से लागू करने और बैटरी बचाने के लिए, कोई फ़िल्टर पास करें, ताकि सभी अनुरोध NetworkFactory को पास न किए जाएं. हालांकि, अगर आपके कस्टम लागू करने के तरीके के लिए ज़रूरी है कि सभी अनुरोध NetworkFactory को भेजे जाएं, तो सामान्य NetworkFactory.register तरीके के बजाय, NetworkFactory.registerIgnoringScore को रजिस्टर किया जा सकता है. इस तरीके का इस्तेमाल करते समय, हमारा सुझाव है कि आप स्कोर फ़िल्टर पास करें. इससे फ़ैक्ट्री, बैटरी बचाने के लिए, उन अनुरोधों का आकलन किए बिना सबसे अच्छा स्कोर बना सकती है जिन्हें फ़ैक्ट्री पूरा नहीं कर सकती.

पुष्टि करें

किसी Android डिवाइस पर नेटवर्क चुनने के तरीके की पुष्टि करने के लिए, इन जांचों का इस्तेमाल करें:

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

गलत तरीके से लागू करने से जुड़ी एक और समस्या है, जिसकी वजह से नेटवर्क एजेंट का बहुत ज़्यादा बैटरी खर्च हो जाता है. अगर एजेंट को बार-बार चालू और बंद किया जाता है, तो इससे बैटरी का ज़्यादा इस्तेमाल हो सकता है.