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