वाई-फ़ाई एसटीए/एसटीए एक साथ काम करना

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

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

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

लागू करना

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

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

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

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

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

  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 डिवाइस से कनेक्ट किया जा सकता है. यह सुविधा, कैमरे जैसे स्मार्ट डिवाइसों से सीधे कनेक्ट करने पर, उपयोगकर्ता अनुभव को बेहतर बनाती है. ऐसा, Android 10 में जोड़े गए WifiNetworkSpecifier एपीआई की मदद से किया जा सकता है.

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

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

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

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

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

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

  • रोमिंग की सुविधा, कम से कम प्राइमरी इंटरफ़ेस (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% सेकंडरी.