वाई-फ़ाई STA/STA एक साथ काम करने की सुविधा

Android 12 में, वाई-फ़ाई एसटीए/एसटीए एक साथ काम करने की सुविधा जोड़ी गई है. इससे डिवाइसों को एक साथ दो वाई-फ़ाई नेटवर्क से कनेक्ट करने की सुविधा मिलती है. यह सुविधा, नीचे दिए गए फ़ंक्शन चालू करती है. हालांकि, इसे इस्तेमाल करना ज़रूरी नहीं है.

  • ब्रेक होने से पहले बनाएं: डिवाइस मौजूदा कनेक्शन टूट जाने से पहले किसी नए वाई-फ़ाई नेटवर्क से कनेक्ट कर लेता है. इससे, वाई-फ़ाई नेटवर्क के बीच स्विच करने पर, बेहतर ट्रांज़िशन मिलता है
  • सिर्फ़ लोकल और इंटरनेट कनेक्शन एक साथ इस्तेमाल करना: डिवाइस, इंटरनेट देने वाले मुख्य कनेक्शन में रुकावट डाले बिना, सिर्फ़ लोकल नेटवर्क से कनेक्ट हो जाता है.
  • एक साथ प्रतिबंधित और इंटरनेट कनेक्शन: डिवाइस, इंटरनेट देने वाले मुख्य कनेक्शन को बाधित किए बिना, प्रतिबंधित नेटवर्क से कनेक्ट हो जाता है. यह नेटवर्क, सिर्फ़ कुछ खास ऐप्लिकेशन के लिए उपलब्ध होता है.
  • (Android 13 या इसके बाद के वर्शन) इंटरनेट कनेक्शन के साथ एक से ज़्यादा नेटवर्क का एक साथ इस्तेमाल करना: डिवाइस दो नेटवर्क से कनेक्ट होता है. ये दोनों नेटवर्क, सभी ऐप्लिकेशन के लिए उपलब्ध होते हैं और इनमें कोई पाबंदी नहीं होती. साथ ही, इनसे इंटरनेट कनेक्शन मिलता है.

इस पेज पर, यह सुविधा चालू होने पर डिवाइस के व्यवहार के बारे में बताया गया है. साथ ही, डिवाइस बनाने वाली कंपनियों और वेंडर के लिए, इसे लागू करने की जानकारी भी दी गई है.

लागू करना

वाई-फ़ाई एसटीए/एसटीए के साथ एक साथ काम करने की सुविधा लागू करने के लिए, डिवाइसों में ये सुविधाएं होनी चाहिए:

  • वाई-फ़ाई चिप या फ़र्मवेयर, एक साथ दो STA कनेक्शन के साथ काम करना चाहिए. फ़र्मवेयर में, दोनों कनेक्शन के लिए सभी चैनल और बैंड कॉम्बिनेशन काम करने चाहिए. परफ़ॉर्मेंस की समस्याओं से बचने के लिए, हमारा सुझाव है कि आप 2x2+2x2 DBS की सुविधा वाली वाई-फ़ाई चिप का इस्तेमाल करें.

  • डिवाइस में IWifiChip के AIDL या HIDL वाले वर्शन में, ये एपीआई काम करने चाहिए.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • HAL वाई-फ़ाई इंटरफ़ेस के कॉम्बिनेशन में एक साथ दो एसटीए इंटरफ़ेस होने चाहिए, जिन्हें स्पेसिफ़िकेशन वाले फ़ॉर्मैट, जैसे कि [{STA} <= 2, ...] का इस्तेमाल करके दिखाया गया हो. ज़्यादा जानकारी के लिए, वाई-फ़ाई के एक से ज़्यादा इंटरफ़ेस पर एक साथ काम करना लेख पढ़ें.

अगर ये ज़रूरी शर्तें पूरी की जाती हैं, तो वाई-फ़ाई एसटीए/एसटीए एक साथ काम करने की सुविधा लागू करें. इसके लिए, ये काम करें:

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

    • ब्रेक से पहले बनाएं: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • एक ही समय पर लोकल-ओनली और इंटरनेट कनेक्शन: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • एक साथ कई डिवाइसों से वीडियो देखने पर पाबंदी और इंटरनेट कनेक्शन: config_wifiMultiStaRestrictedConcurrencyEnabled
    • इंटरनेट कनेक्शन के साथ एक साथ कई नेटवर्क: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. लागू किए गए हर सेक्शन की पुष्टि उनसे जुड़े सेक्शन में बताए गए तरीके से करें.

हमारा सुझाव है कि Wi-Fi STA/STA के साथ एक साथ काम करने की सुविधा को बेहतर बनाने के लिए, OEM के हिसाब से बनाए गए फ़्रेमवर्क और ऐप्लिकेशन, WifiManager#getConnectionInfo() के बजाय NetworkCallback#onCapabilitiesChanged() का इस्तेमाल करें. WifiManager#getConnectionInfo() सिर्फ़ एक नेटवर्क के लिए WifiInfo दिखाता है और इसे Android 12 में बंद कर दिया गया है. ज़्यादा जानकारी के लिए, पियर-टू-पियर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क अनुरोध एपीआई देखें.

Make-before-break

make-before-break फ़ंक्शन की मदद से, डिवाइसों को मौजूदा वाई-फ़ाई नेटवर्क से कनेक्ट रहते हुए, नए वाई-फ़ाई नेटवर्क से कनेक्ट किया जा सकता है. यह फ़ंक्शन, डिवाइस को पुराने नेटवर्क से सिर्फ़ तब डिसकनेक्ट करता है, जब वह नए वाई-फ़ाई नेटवर्क से कनेक्ट हो जाता है और इंटरनेट का ऐक्सेस मिल जाता है.

'कनेक्ट करने से पहले डिसकनेक्ट करना' के इस्तेमाल के उदाहरण से, Android 11 या उससे पहले के वर्शन में आने वाली इन समस्याओं को हल किया जा सकता है. इनमें, किसी नए नेटवर्क से कनेक्ट करने से पहले, डिवाइस को मौजूदा वाई-फ़ाई नेटवर्क से डिसकनेक्ट करना (कनेक्ट करने से पहले डिसकनेक्ट करना) शामिल है.

  • किसी नए नेटवर्क से कनेक्ट करते समय, डिवाइस को पता चल सकता है कि डिवाइस में वाई-फ़ाई का गलत पासवर्ड सेव किया गया है या नए नेटवर्क में इंटरनेट का ऐक्सेस नहीं है. इससे डिवाइस को पुराने नेटवर्क पर वापस स्विच करना पड़ता है. इस वजह से, डिवाइस को वाई-फ़ाई से कनेक्ट होने में काफ़ी समय लगता है.

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

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

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

ऐप्लिकेशन, WifiManager#isMakeBeforeBreakWifiSwitchingSupported() एपीआई का इस्तेमाल करके यह देख सकते हैं कि डिवाइस पर इस इस्तेमाल के उदाहरण का इस्तेमाल किया जा सकता है या नहीं.

ब्रेक से पहले मेक-अप करें की पुष्टि करें

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

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

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

सिर्फ़ स्थानीय और इंटरनेट कनेक्शन का एक साथ इस्तेमाल करना

एक ही समय पर लोकल-ओनली और इंटरनेट कनेक्शन फ़ंक्शन की मदद से, डिवाइस सिर्फ़ लोकल कनेक्शन से कनेक्ट किए जा सकते हैं. जैसे, IoT डिवाइस और इंटरनेट उपलब्ध कराने वाले मुख्य नेटवर्क. यह फ़ंक्शन, कैमरे जैसे IoT डिवाइसों से सीधे कनेक्ट होने पर लोगों के अनुभव को बेहतर बनाता है. यह सुविधा Android 10 में जोड़े गए WifiNetworkSpecifier API की मदद से मुमकिन है.

Android 11 और उससे पहले के वर्शन में, जब IoT डिवाइस को कनेक्ट किया जाता है, तो वे मुख्य वाई-फ़ाई नेटवर्क से डिसकनेक्ट हो जाते हैं. ऐसे में, इंटरनेट कनेक्टिविटी टूट जाती है (जब तक कि डिवाइस में परिवहन का कोई दूसरा प्रकार उपलब्ध न हो, जैसे कि मोबाइल डेटा).

ऐप्लिकेशन, WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() एपीआई का इस्तेमाल करके यह देख सकते हैं कि डिवाइस पर यह सुविधा काम करती है या नहीं.

Android 12 में, एक साथ लोकल-ओनली ऐक्सेस और इंटरनेट कनेक्शन फ़ंक्शन में हुए बदलावों के बारे में ज़्यादा जानकारी के लिए, पीयर-टू-पीयर कनेक्टिविटी के लिए वाई-फ़ाई नेटवर्क के अनुरोध का एपीआई देखें.

सिर्फ़ स्थानीय और इंटरनेट कनेक्शन की पुष्टि करना

इस फ़ंक्शन की पुष्टि करने के लिए, MultiStaConcurrencyWifiNetworkSpecifierTest सीटीएस टेस्ट का इस्तेमाल करें.

एक साथ प्रतिबंधित और इंटरनेट कनेक्शन

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

ऐप्लिकेशन, WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() एपीआई का इस्तेमाल करके यह देख सकते हैं कि डिवाइस पर यह सुविधा काम करती है या नहीं.

किसी डिवाइस को पाबंदी वाले दूसरे वाई-फ़ाई नेटवर्क से कनेक्ट करने के लिए, यह तरीका अपनाएं:

  1. setOemPaid या setOemPrivate से वाई-फ़ाई नेटवर्क के सुझाव जोड़ें.

  2. ConnectivityManager में, ज़रूरी शर्तें पूरी करने वाली NetworkRequest फ़ाइल करें:

जब डिवाइस को स्कैन के नतीजों में कोई ऐसा नेटवर्क मिलता है जो OEM के पैसे चुकाकर इस्तेमाल किए जाने वाले या OEM के निजी सुझाव से मेल खाता है, तो वह अपने-आप उससे सेकंडरी नेटवर्क के तौर पर कनेक्ट हो जाता है.

एक साथ कई डिवाइसों से इस्तेमाल करने पर पाबंदी और इंटरनेट कनेक्शन की पुष्टि करना

इस फ़ंक्शन की पुष्टि करने के लिए, MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest सीटीएस टेस्ट का इस्तेमाल करें.

इंटरनेट कनेक्शन के साथ एक से ज़्यादा नेटवर्क का एक साथ इस्तेमाल करना

इंटरनेट कनेक्शन वाले एक से ज़्यादा नेटवर्क से एक साथ कनेक्ट करने की सुविधा, Android 13 या इसके बाद के वर्शन वाले डिवाइसों पर उपलब्ध है. इसकी मदद से, डिवाइस एक साथ दो नेटवर्क (एपी) से कनेक्ट हो सकता है. ये दोनों नेटवर्क, बिना किसी पाबंदी के (सभी ऐप्लिकेशन के पास ऐक्सेस है) इंटरनेट ऐक्सेस देते हैं.

WifiManager#isStaConcurrencyForMultiInternetSupported() वाले तरीके का इस्तेमाल करके, ऐप्लिकेशन यह पता लगा सकते हैं कि यह सुविधा, डिवाइस पर काम करती है या नहीं.

अगर यह सुविधा काम करती है, तो खास ऐप्लिकेशन, WifiManager#setStaConcurrencyForMultiInternetMode(int mode) तरीके का इस्तेमाल करके इस सुविधा को चालू कर सकते हैं. इस सुविधा के ये मोड हैं:

फ़िलहाल चालू सुविधा मोड के बारे में क्वेरी करने के लिए, WifiManager#getStaConcurrencyForMultiInternetMode() तरीका इस्तेमाल करें.

सुविधा चालू होने पर, इंटरनेट देने वाले किसी अन्य वाई-फ़ाई नेटवर्क का अनुरोध करने के लिए, यह तरीका अपनाएं.

  1. WifiNetworkSpecifier.Builder का इस्तेमाल करके, वाई-फ़ाई नेटवर्क के बारे में जानकारी देने वाला एलिमेंट बनाएं. setBand() तरीके का इस्तेमाल करके, स्पेसिफ़िकेशन के लिए बैंड चुनें. SSID या BSSID को तय न करें क्योंकि बताए गए बैंड के लिए अतिरिक्त नेटवर्क को वाई-फ़ाई फ़्रेमवर्क से चुना जाता है.

  2. ConnectivityManager का इस्तेमाल करके, NET_CAPABILITY_INTERNET की सुविधा वाला NetworkRequest बनाएं.

  3. NetworkCallback इंस्टेंस के साथ नेटवर्क अनुरोध में खास जानकारी जोड़ें, ताकि अनुरोध के स्टेटस को ट्रैक किया जा सके और अनुरोध को ConnectivityManager को जारी किया जा सके. अगर स्कैन के नतीजे में, अनुरोध किए गए बैंड वाला सेव किया गया नेटवर्क उपलब्ध है और नेटवर्क से कनेक्ट हो जाता है, तो कॉलबैक ऑब्जेक्ट पर NetworkCallback.onAvailable() को लागू किया जाता है.

इंटरनेट कनेक्शन के साथ एक साथ कई नेटवर्क की पुष्टि करना

इस फ़ंक्शन की पुष्टि करने के लिए, नीचे दिए गए सीटीएस टेस्ट का इस्तेमाल करें:

  • सीटीएस: MultiStaConcurrencyMultiInternetWifiNetworkTest

वेंडर की वाई-फ़ाई चिप के लिए दिशा-निर्देश

वाई-फ़ाई चिप के वेंडर, वाई-फ़ाई एसटीए/एसटीए के साथ-साथ काम करने के लिए, इन दिशा-निर्देशों का पालन करें.

वाई-फ़ाई चिप को एक साथ दो STA कनेक्शन के साथ काम करना चाहिए. इसका मतलब है कि यह, इन सुविधाओं के साथ काम करता है:

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

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

  • रोमिंग की सुविधा, कम से कम प्राइमरी इंटरफ़ेस (IWifiChip.setMultiStaPrimaryConnection() का इस्तेमाल करके सेट की गई) पर काम करनी चाहिए. अगर रोमिंग की सुविधा, दोनों इंटरफ़ेस पर काम करती है, तो एक कनेक्शन के लिए लिए गए फ़ैसले, एक साथ काम करने वाले दूसरे कनेक्शन के फ़ैसलों से मेल नहीं खाने चाहिए. उदाहरण के लिए, एक इंटरफ़ेस को दूसरे कनेक्शन के बीएसएसआईडी पर रोम नहीं करना चाहिए.

  • APF (और ARP और NS जैसे अन्य ऑफ़लोड) कम से कम प्राइमरी इंटरफ़ेस (IWifiChip.setMultiStaPrimaryConnection() का इस्तेमाल करके सेट किया गया) पर काम करना चाहिए.

  • लिंक लेयर के आंकड़े, हर इंटरफ़ेस के हिसाब से काम करने चाहिए.

एक साथ कई काम करने की अलग-अलग स्थितियों के लिए, वाई-फ़ाई चिप को लागू करने के सुझाव यहां दिए गए हैं:

  • वाई-फ़ाई चिप को फ़्रेमवर्क को IWifiChip.setMultiStaUseCase() को कॉल करने की अनुमति देनी चाहिए. इसके लिए, फ़्रेमवर्क को इनमें से किसी एक कॉन्स्टेंट का इस्तेमाल करना होगा, ताकि मौजूदा फ़ंक्शन के बारे में बताया जा सके:

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: Make-Before-Break फ़ंक्शन के बारे में बताता है. मुख्य कनेक्शन की क्वालिटी को, सेकंडरी कनेक्शन की क्वालिटी से ज़्यादा प्राथमिकता दी जानी चाहिए.
    • 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% सेकंडरी.