Android 12 में, वाई-फ़ाई STA/STA कंकरेंसी की सुविधा जोड़ी गई है. इसकी मदद से, डिवाइस एक साथ दो वाई-फ़ाई नेटवर्क से कनेक्ट हो सकते हैं. यह वैकल्पिक सुविधा, इन फ़ंक्शन को चालू करती है:
- मेक-बिफ़ोर-ब्रेक: डिवाइस, मौजूदा कनेक्शन को बंद करने से पहले, नए वाई-फ़ाई नेटवर्क से कनेक्ट हो जाता है. इससे, वाई-फ़ाई नेटवर्क के बीच स्विच करने पर, बेहतर ट्रांज़िशन मिलते हैं.
- सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ: डिवाइस, सिर्फ़ लोकल नेटवर्क से कनेक्ट होता है. इस दौरान, डिवाइस के इंटरनेट कनेक्शन पर कोई असर नहीं पड़ता.
- सीमित नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ: डिवाइस, सीमित नेटवर्क (सिर्फ़ कुछ खास ऐप्लिकेशन के लिए उपलब्ध) से कनेक्ट होता है. इस दौरान, डिवाइस के इंटरनेट कनेक्शन पर कोई असर नहीं पड़ता.
- (Android 13 या इसके बाद के वर्शन) इंटरनेट कनेक्शन के साथ, एक साथ कई नेटवर्क: डिवाइस, दो नेटवर्क से कनेक्ट होता है. ये दोनों नेटवर्क, सभी ऐप्लिकेशन के लिए उपलब्ध होते हैं और इनसे इंटरनेट कनेक्टिविटी मिलती है.
इस पेज पर, यह बताया गया है कि इस सुविधा के चालू होने पर डिवाइस कैसे काम करता है. साथ ही, डिवाइस बनाने वाली कंपनियों और वेंडर के लिए, इसे लागू करने से जुड़ी जानकारी भी दी गई है.
लागू करना
वाई-फ़ाई STA/STA कंकरेंसी की सुविधा लागू करने के लिए, डिवाइसों में ये सुविधाएं होनी चाहिए:
वाई-फ़ाई चिप या फ़र्मवेयर में, एक साथ दो एसटीए कनेक्शन की सुविधा होनी चाहिए. फ़र्मवेयर में, दोनों कनेक्शन के लिए सभी चैनल और बैंड कॉम्बिनेशन की सुविधा होनी चाहिए. परफ़ॉर्मेंस से जुड़ी समस्याओं से बचने के लिए, हमारा सुझाव है कि 2x2+2x2 डीबीएस की सुविधा वाली वाई-फ़ाई चिप का इस्तेमाल करें.
डिवाइस में,
IWifiChipके एआईडीएल या एचआईडीएल लागू करने के लिए, ये एपीआई होने चाहिए.IWifiChip.setMultiStaPrimaryConnection(String ifName)IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
एचएएल वाई-फ़ाई इंटरफ़ेस कॉम्बिनेशन में, एक साथ दो एसटीए इंटरफ़ेस होने चाहिए इन्हें,
[{STA} <= 2, ...]जैसे स्पेसिफ़िकेशन फ़ॉर्मैट का इस्तेमाल करके दिखाया जाना चाहिए. ज़्यादा जानकारी के लिए, वाई-फ़ाई मल्टी-इंटरफ़ेस कंकरेंसी लेख पढ़ें.
अगर ये ज़रूरी शर्तें पूरी हो गई हैं, तो वाई-फ़ाई STA/STA कंकरेंसी की सुविधा लागू करने के लिए, यह तरीका अपनाएं:
-
- मेक-बिफ़ोर-ब्रेक:
config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled - सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ:
config_wifiMultiStaLocalOnlyConcurrencyEnabled - सीमित नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ:
config_wifiMultiStaRestrictedConcurrencyEnabled - इंटरनेट कनेक्शन के साथ, एक साथ कई नेटवर्क:
config_wifiMultiStaMultiInternetConcurrencyEnabled
- मेक-बिफ़ोर-ब्रेक:
हर सुविधा को लागू करने के तरीके की पुष्टि करें. इसके लिए, उनसे जुड़े सेक्शन में दिए गए निर्देशों का पालन करें.
हमारा सुझाव है कि ओईएम के हिसाब से बनाए गए फ़्रेमवर्क और ऐप्लिकेशन, वाई-फ़ाई STA/STA कंकरेंसी की सुविधा को बेहतर तरीके से सपोर्ट करें. इसके लिए, WifiManager#getConnectionInfo() के बजाय, NetworkCallback#onCapabilitiesChanged() तरीके का इस्तेमाल करें. WifiManager#getConnectionInfo() सिर्फ़ एक नेटवर्क के लिए WifiInfo दिखाता है. इसे Android 12 में बंद कर दिया गया है. ज़्यादा जानकारी के लिए, पीयर-टू-पीयर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क अनुरोध एपीआई लेख पढ़ें.
मेक-बिफ़ोर-ब्रेक
मेक-बिफ़ोर-ब्रेक फ़ंक्शन की मदद से, डिवाइस मौजूदा वाई-फ़ाई नेटवर्क कनेक्शन को बनाए रखते हुए, नए वाई-फ़ाई नेटवर्क से कनेक्ट हो सकते हैं. डिवाइस, पुराने नेटवर्क से सिर्फ़ तब डिसकनेक्ट होता है, जब वह नए वाई-फ़ाई नेटवर्क से कनेक्ट हो जाता है और उसके पास इंटरनेट का ऐक्सेस होता है.
मेक-बिफ़ोर-ब्रेक के इस्तेमाल के उदाहरण से, Android 11 या इससे पहले के वर्शन में आने वाली इन समस्याओं को हल किया जा सकता है. इनमें, डिवाइस को नए नेटवर्क से कनेक्ट होने से पहले, मौजूदा वाई-फ़ाई नेटवर्क से डिसकनेक्ट होना पड़ता है (ब्रेक-बिफ़ोर-मेक).
नए नेटवर्क से कनेक्ट होने पर, डिवाइस को पता चल सकता है कि उसमें वाई-फ़ाई का गलत पासवर्ड सेव है या नए नेटवर्क के पास इंटरनेट का ऐक्सेस नहीं है. इससे डिवाइस को पुराने नेटवर्क पर वापस स्विच करना पड़ता है. इस वजह से, वाई-फ़ाई कनेक्टिविटी के बिना काफ़ी समय बीत जाता है.
पुराना नेटवर्क अचानक डिसकनेक्ट हो जाता है. इसका मतलब है कि सभी सॉकेट बंद हो जाते हैं. ऐप्लिकेशन, कनेक्टिविटी के अचानक बंद होने पर अक्सर ठीक से काम नहीं करते. इससे उपयोगकर्ता को कुछ सेकंड के लिए इंटरनेट कनेक्टिविटी नहीं मिलती. ऐसा तब तक होता है, जब तक नया कनेक्शन पूरी तरह से बन नहीं जाता.
डिफ़ॉल्ट नेटवर्क दो बार बदलता है. पहले, पुराने वाई-फ़ाई नेटवर्क से सेल्युलर नेटवर्क पर और फिर सेल्युलर नेटवर्क से नए वाई-फ़ाई नेटवर्क पर. इससे ऐप्लिकेशन, नेटवर्क में होने वाले बदलावों पर दो बार प्रतिक्रिया करते हैं. डिवाइस को सेल्युलर डेटा का इस्तेमाल भी कुछ समय के लिए करना पड़ता है.
मेक-बिफ़ोर-ब्रेक फ़्लो का इस्तेमाल सिर्फ़ ओएस की ओर से शुरू किए गए, वाई-फ़ाई नेटवर्क के ऑटोमैटिक स्विच के लिए किया जाता है. उपयोगकर्ता की ओर से शुरू किए गए नेटवर्क स्विच के लिए, पुराने ब्रेक-बिफ़ोर-मेक फ़्लो का इस्तेमाल किया जाता है. इसमें, नया नेटवर्क कनेक्ट होने से पहले, पिछला नेटवर्क पूरी तरह से डिसकनेक्ट हो जाता है. कुछ मामलों में, ओएस की ओर से शुरू किए गए ऑटोमैटिक स्विच में भी ब्रेक-बिफ़ोर-मेक फ़्लो का इस्तेमाल किया जाता है. उदाहरण के लिए, फ़ैक्ट्री के मैक पते का इस्तेमाल करने के लिए कॉन्फ़िगर किए गए दो नेटवर्क के बीच स्विच करते समय.
ऐप्लिकेशन, WifiManager#isMakeBeforeBreakWifiSwitchingSupported() एपीआई का इस्तेमाल करके यह पता लगा सकते हैं कि डिवाइस पर इस सुविधा का इस्तेमाल किया जा सकता है या नहीं.
मेक-बिफ़ोर-ब्रेक की पुष्टि करना
अपने लागू करने के तरीके की पुष्टि करने के लिए, वाई-फ़ाई नेटवर्क के ऑटोमैटिक स्विच को ट्रिगर करें. इसके लिए, यह पुष्टि करें कि कनेक्ट किए गए नेटवर्क की तुलना में, ज़्यादा सिग्नल स्ट्रेंथ वाला नेटवर्क उपलब्ध है. इसके बाद, पुष्टि करें कि डिवाइस नए नेटवर्क से कनेक्ट होने के दौरान, मौजूदा कनेक्शन को बनाए रखता है. दोनों वाई-फ़ाई इंटरफ़ेस का स्टेटस देखने और यह पुष्टि करने के लिए कि दोनों कनेक्ट हैं, यह कमांड इस्तेमाल करें:
adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status
अगर नए नेटवर्क में कनेक्टिविटी नहीं है, तो डिवाइस उस नेटवर्क से कनेक्ट होने की कोशिश करता है. इस दौरान, वह मौजूदा नेटवर्क से कनेक्शन बनाए रखता है. जब डिवाइस को पता चलता है कि नए नेटवर्क में इंटरनेट नहीं है, तो वह कनेक्शन बनाने की कोशिश बंद कर देता है. इसके बाद, डिवाइस मौजूदा कनेक्शन को प्राइमरी वाई-फ़ाई नेटवर्क के तौर पर इस्तेमाल करना जारी रखता है.
सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ
सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ फ़ंक्शन की मदद से, डिवाइस सिर्फ़ लोकल नेटवर्क से कनेक्ट हो सकते हैं. जैसे, आईओटी डिवाइस से कनेक्शन. इस दौरान, डिवाइस के इंटरनेट कनेक्शन पर कोई असर नहीं पड़ता. इस फ़ंक्शन से, आईओटी डिवाइसों से सीधे कनेक्ट होने पर उपयोगकर्ता अनुभव बेहतर होता है. जैसे, कैमरे. Android 10 में जोड़े गए WifiNetworkSpecifier एपीआई की मदद से, ऐसा किया जा सकता है.
Android 11 और इससे पहले के वर्शन में, डिवाइस आईओटी डिवाइस से कनेक्ट होने पर, प्राइमरी वाई-फ़ाई नेटवर्क से डिसकनेक्ट हो जाते हैं. इससे इंटरनेट कनेक्टिविटी खत्म हो जाती है. हालांकि, ऐसा तब नहीं होता, जब डिवाइस के पास सेल्युलर डेटा जैसे किसी दूसरे ट्रांसपोर्ट टाइप की सुविधा उपलब्ध हो.
ऐप्लिकेशन, WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() एपीआई का इस्तेमाल करके यह पता लगा सकते हैं कि डिवाइस पर इस फ़ंक्शन का इस्तेमाल किया जा सकता है या नहीं.
Android 12 में, सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ फ़ंक्शन में किए गए बदलावों के बारे में ज़्यादा जानने के लिए, पीयर-टू-पीयर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क अनुरोध एपीआई लेख पढ़ें.
सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन की पुष्टि करना
इस फ़ंक्शन की पुष्टि करने के लिए, MultiStaConcurrencyWifiNetworkSpecifierTest सीटीएस टेस्ट का इस्तेमाल करें.
सीमित नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ
सीमित नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ फ़ंक्शन की मदद से, डिवाइस एक साथ दो वाई-फ़ाई नेटवर्क से कनेक्ट हो सकते हैं. इनमें से एक नेटवर्क, उपयोगकर्ता के लिए प्राइमरी वाई-फ़ाई नेटवर्क होता है. वहीं, दूसरा नेटवर्क, सीमित वाई-फ़ाई नेटवर्क होता है. यह नेटवर्क, सिर्फ़ चुने गए ऐप्लिकेशन के लिए उपलब्ध होता है.
ऐप्लिकेशन, WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() एपीआई का इस्तेमाल करके यह पता लगा सकते हैं कि डिवाइस पर इस फ़ंक्शन का इस्तेमाल किया जा सकता है या नहीं.
किसी डिवाइस को सीमित वाई-फ़ाई नेटवर्क से कनेक्ट करने के लिए, यह तरीका अपनाएं:
वाई-फ़ाई नेटवर्क के सुझाव जोड़ें. इसके लिए, को 'सही' पर सेट करें.
setOemPaidsetOemPrivateConnectivityManagerमें, इनसे जुड़ी क्षमताओं के साथNetworkRequestफ़ाइल करें:NET_CAPABILITY_OEM_PAIDके लिएsetOemPaidNET_CAPABILITY_OEM_PRIVATEके लिएsetOemPrivate
जब डिवाइस को स्कैन के नतीजों में, ओईएम के लिए पैसे चुकाकर इस्तेमाल किए जाने वाले या ओईएम के निजी नेटवर्क के सुझाव से मेल खाने वाला नेटवर्क मिलता है, तो वह उससे दूसरे नेटवर्क के तौर पर अपने-आप कनेक्ट हो जाता है.
सीमित नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ की पुष्टि करना
इस फ़ंक्शन की पुष्टि करने के लिए, MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest सीटीएस टेस्ट का इस्तेमाल करें.
इंटरनेट कनेक्शन के साथ, एक साथ कई नेटवर्क
Android 13 या इसके बाद के वर्शन के लिए उपलब्ध, इंटरनेट कनेक्शन के साथ, एक साथ कई नेटवर्क सुविधा की मदद से, डिवाइस एक साथ दो नेटवर्क (एपी) से कनेक्ट हो सकते हैं. ये दोनों नेटवर्क, सभी ऐप्लिकेशन के लिए उपलब्ध होते हैं और इनसे इंटरनेट ऐक्सेस मिलता है.
ऐप्लिकेशन,
WifiManager#isStaConcurrencyForMultiInternetSupported()
तरीके का इस्तेमाल करके यह पता लगा सकते हैं कि डिवाइस पर इस सुविधा का इस्तेमाल किया जा सकता है या नहीं.
अगर डिवाइस पर इस सुविधा का इस्तेमाल किया जा सकता है, तो खास अनुमतियों वाले ऐप्लिकेशन, WifiManager#setStaConcurrencyForMultiInternetMode(int mode) तरीके का इस्तेमाल करके इस सुविधा को चालू कर सकते हैं. इस सुविधा के ये मोड हैं:
WifiManager#WIFI_MULTI_INTERNET_MODE_DBS_AP: यह सुविधा, डीबीएस एपी के डुअल बैंड के लिए, डुअल कनेक्शन को सीमित करती है.WifiManager#WIFI_MULTI_INTERNET_MODE_MULTI_AP: यह सुविधा, किसी भी एपी से कनेक्ट होती है. इसमें, अलग-अलग कनेक्शन के लिए अलग-अलग बैंड का इस्तेमाल किया जाता है.WifiManager#WIFI_MULTI_INTERNET_MODE_DISABLED: यह सुविधा को बंद करती है.
चालू सुविधा का मोड जानने के लिए, WifiManager#getStaConcurrencyForMultiInternetMode()
तरीके का इस्तेमाल करें.
सुविधा चालू होने पर, इंटरनेट की सुविधा देने वाले किसी दूसरे वाई-फ़ाई नेटवर्क का अनुरोध करने के लिए, यह तरीका अपनाएं.
`WifiNetworkSpecifier.Builder` का इस्तेमाल करके, वाई-फ़ाई नेटवर्क स्पेसिफ़ायर बनाएं.
WifiNetworkSpecifier.Builder`setBand()` तरीके का इस्तेमाल करके, स्पेसिफ़ायर के लिए कोई बैंड चुनें. एसएसआईडी या बीएसएसआईडी के बारे में जानकारी न दें, क्योंकि बताए गए बैंड के लिए दूसरा नेटवर्क, वाई-फ़ाई फ़्रेमवर्क चुनता है.ConnectivityManagerका इस्तेमाल करके,NetworkRequestक्षमता के साथNET_CAPABILITY_INTERNETबनाएं.अनुरोध का स्टेटस ट्रैक करने के लिए, नेटवर्क अनुरोध में स्पेसिफ़ायर के साथ
NetworkCallbackइंस्टेंस जोड़ें. इसके बाद,ConnectivityManagerको अनुरोध भेजें. अगर स्कैन के नतीजों में, अनुरोध किए गए बैंड वाला कोई सेव किया गया नेटवर्क उपलब्ध है और डिवाइस उस नेटवर्क से कनेक्ट हो जाता है, तो कॉलबैक ऑब्जेक्ट परNetworkCallback.onAvailable()शुरू हो जाता है.
इंटरनेट कनेक्शन के साथ, एक साथ कई नेटवर्क की पुष्टि करना
इस फ़ंक्शन की पुष्टि करने के लिए, यह सीटीएस टेस्ट इस्तेमाल करें:
- सीटीएस:
MultiStaConcurrencyMultiInternetWifiNetworkTest
वेंडर के लिए वाई-फ़ाई चिप से जुड़े दिशा-निर्देश
वाई-फ़ाई चिप के वेंडर, वाई-फ़ाई STA/STA कंकरेंसी की सुविधा देने के लिए, इन दिशा-निर्देशों का पालन करें.
वाई-फ़ाई चिप में, एक साथ दो एसटीए कनेक्शन की सुविधा होनी चाहिए. इसका मतलब है कि इसमें ये सुविधाएं होनी चाहिए:
- हर एसटीए इंटरफ़ेस का एक यूनीक मैक होता है, जिसे फ़्रेमवर्क की मदद से प्रोग्राम किया जा सकता है.
- दूसरे एसटीए इंटरफ़ेस को डाइनैमिक तौर पर बनाया और मिटाया जा सकता है.
- हर एसटीए को अलग-अलग एसएसआईडी से कनेक्ट किया जा सकता है. ये एसएसआईडी, एक ही बैंड या अलग-अलग बैंड में हो सकते हैं.
- हर एसटीए को एक ही एसएसआईडी से कनेक्ट किया जा सकता है. ये एसएसआईडी, एक ही बैंड या अलग-अलग बैंड में हो सकते हैं. दोनों एसटीए को कभी भी एक ही बीएसएसआईडी से कनेक्ट नहीं किया जाना चाहिए.
ज़रूरी सुविधाएं, हर इंटरफ़ेस के हिसाब से काम करनी चाहिए. साथ ही, ये प्राइमरी इंटरफ़ेस पर उपलब्ध होनी चाहिए. इन ज़रूरी सुविधाओं की सूची यहां दी गई है:
रोमिंग की सुविधा, कम से कम प्राइमरी इंटरफ़ेस पर होनी चाहिए. इसे
IWifiChip.setMultiStaPrimaryConnection()का इस्तेमाल करके सेट किया जाता है. अगर रोमिंग की सुविधा, दोनों इंटरफ़ेस पर उपलब्ध है, तो एक कनेक्शन के फ़ैसले, दूसरे कनेक्शन के साथ टकराव नहीं करने चाहिए. उदाहरण के लिए, एक इंटरफ़ेस को दूसरे कनेक्शन के बीएसएसआईडी पर रोम नहीं करना चाहिए.एपीएफ़ (और एआरपी और एनएस जैसे अन्य ऑफ़लोड) की सुविधा, कम से कम प्राइमरी इंटरफ़ेस पर होनी चाहिए. इसे
IWifiChip.setMultiStaPrimaryConnection()का इस्तेमाल करके सेट किया जाता है.लिंक लेयर के आंकड़े, हर इंटरफ़ेस के हिसाब से काम करने चाहिए.
अलग-अलग कंकरेंसी स्थितियों के लिए, वाई-फ़ाई चिप को लागू करने के ये तरीके अपनाए जा सकते हैं:
वाई-फ़ाई चिप में, फ़्रेमवर्क को
IWifiChip.setMultiStaUseCase()कॉल करने की अनुमति होनी चाहिए. इससे, मौजूदा फ़ंक्शन के बारे में बताने के लिए, इनमें से किसी एक कॉन्स्टैंट का इस्तेमाल किया जा सकता है:DUAL_STA_TRANSIENT_PREFER_PRIMARY: यह मेक-बिफ़ोर-ब्रेक फ़ंक्शन के बारे में बताता है. प्राइमरी कनेक्शन की क्वालिटी को, सेकंडरी कनेक्शन की क्वालिटी से ज़्यादा प्राथमिकता दी जानी चाहिए.DUAL_STA_NON_TRANSIENT_UNBIASED: यह सिर्फ़ लोकल नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ या सीमित नेटवर्क और इंटरनेट कनेक्शन, दोनों एक साथ फ़ंक्शन के बारे में बताता है. दोनों कनेक्शन की क्वालिटी को बराबर प्राथमिकता दी जानी चाहिए.
डुअल कंकरेंट एसटीए की वजह से, एमसीसी, एससीसी, और डीबीएस मोड में काम किया जा सकता है. इसलिए, वेंडर को लागू करने के तरीके में, सबसे अच्छा रेडियो कॉन्फ़िगरेशन चुनना चाहिए. ऐसा तब करना चाहिए, जब फ़्रेमवर्क, फ़ंक्शन के बारे में बताने के लिए
IWifiChip.setMultiStaUseCase()को कॉल करता है. यहां कुछ सामान्य दिशा-निर्देश दिए गए हैं:- अगर 2x2+2x2 डीबीएस की सुविधा उपलब्ध है, तो इसे प्राथमिकता दी जानी चाहिए.
- अगर हो सके, तो 1x1+1x1 डीबीएस से बचें, क्योंकि इससे कनेक्शन की क्वालिटी पर बहुत ज़्यादा असर पड़ता है. इसके बजाय, एमसीसी को प्राथमिकता दें.
- ड्राइवर या फ़र्मवेयर की मदद से, अलग-अलग फ़ंक्शन के लिए एमसीसी ड्यूटी साइकल को कॉन्फ़िगर किया जाना चाहिए. फ़्रेमवर्क, एमसीसी ड्यूटी साइकल को सीधे तौर पर सेट नहीं करता. हालांकि, यह
StaLinkLayerIfaceStats.timeSliceDutyCycleInPercentका इस्तेमाल करके, इस जानकारी के बारे में क्वेरी करता है. अगर एमसीसी का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि प्राइमरी और सेकंडरी कनेक्शन के बीच, इन ड्यूटी साइकल का इस्तेमाल करें:
DUAL_STA_TRANSIENT_PREFER_PRIMARY: 70% प्राइमरी, 30% सेकंडरी.DUAL_STA_NON_TRANSIENT_UNBIASED: 50% प्राइमरी, 50% सेकंडरी.