Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन वाले डिवाइसों पर, आपका ऐप्लिकेशन किसी डिवाइस के लिए नेटवर्क क्रेडेंशियल जोड़ सकता है, ताकि वह वाई-फ़ाई ऐक्सेस पॉइंट से अपने-आप कनेक्ट हो जाए.
सुझाव दिया जा सकता है कि किस नेटवर्क से कनेक्ट किया जाए
WifiNetworkSuggestion.
प्लैटफ़ॉर्म, आपके और अन्य ऐप्लिकेशन से मिले इनपुट के आधार पर यह तय करता है कि किस ऐक्सेस पॉइंट को स्वीकार किया जाए.
Android 11 (एपीआई लेवल 30) और इसके बाद के वर्शन पर:
- सुझाव देने वाले एपीआई से,
PasspointConfigurationकी सुविधा दी जा सकती है. Android 11 से पहले, सुविधा देने के लिए,PasspointConfigurationकी ज़रूरत होती है. इसके लिए,addOrUpdatePasspointConfiguration()एपीआई का इस्तेमाल किया जाता है. - फ़्रेमवर्क, टीएलएस पर आधारित Enterprise
के सुझावों (EAP-TLS, EAP-TTLS, और EAP-PEAP) पर सुरक्षा से जुड़ी ज़रूरी शर्तें लागू करता है. ऐसे नेटवर्क
के सुझावों के लिए,
Root CA certificateऔरserver domain nameसेट करना ज़रूरी है.
- फ़्रेमवर्क, EAP-SIM पर आधारित Enterprise के सुझावों (EAP-SIM, EAP-AKA, EAP-AKA-PRIME) के लिए, मालिकाना हक से जुड़ी ज़रूरी शर्तें लागू करता है. ऐसे सुझाव सिर्फ़ उन ऐप्लिकेशन से दिए जा सकते हैं जिन पर कैरियर का हस्ताक्षर हो.
- कैरियर के हस्ताक्षर वाले ऐप्लिकेशन से मिले सुझावों के लिए, फ़्रेमवर्क उन्हें अपने-आप कैरियर आईडी असाइन कर देता है. यह आईडी, ऐप्लिकेशन के कैरियर के हस्ताक्षरके मुताबिक होता है. अगर डिवाइस से, इससे जुड़ी सिम हटा दी जाती है, तो ऐसे सुझाव अपने-आप बंद हो जाते हैं.
Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन पर:
नॉन-परसिस्टेंट मैक रैंडमाइज़ेशन की मदद से, निजता से जुड़ी ज़्यादा सुरक्षा दी जा सकती है. इससे, बिना किसी तय नियम के चुने गए मैक पते को समय-समय पर फिर से रैंडमाइज़ किया जाता है. अपने नेटवर्क के लिए रैंडमाइज़ेशन का लेवल तय करने के लिए,
setMacRandomizationSettingका इस्तेमाल करें.isPasspointTermsAndConditionsSupported(): नियम और शर्तें, पासपॉइंट की एक सुविधा है. इसकी मदद से, नेटवर्क डिप्लॉयमेंट, असुरक्षित कैप्टिव पोर्टल को सुरक्षित पासपॉइंट नेटवर्क से बदल सकते हैं. असुरक्षित कैप्टिव पोर्टल, खुले नेटवर्क का इस्तेमाल करते हैं. नियम और शर्तें स्वीकार करने की ज़रूरत पड़ने पर, उपयोगकर्ता को एक सूचना दिखती है. पासपॉइंट नेटवर्क का सुझाव देने वाले ऐप्लिकेशन को, सबसे पहले इस एपीआई को कॉल करना होगा, ताकि यह पक्का किया जा सके कि डिवाइस इस सुविधा के साथ काम करता है. अगर डिवाइस इस सुविधा के साथ काम नहीं करता है, तो वह इस नेटवर्क से कनेक्ट नहीं हो पाएगा. ऐसे में, किसी दूसरे या पुराने नेटवर्क का सुझाव देना होगा.isDecoratedIdentitySupported(): प्रीफ़िक्स डेकोरेशन वाले नेटवर्क से पुष्टि करते समय, डेकोरेटेड आइडेंटिटी प्रीफ़िक्स, नेटवर्क ऑपरेटरों को नेटवर्क ऐक्सेस आइडेंटिफ़ायर (एनएआई) को अपडेट करने की अनुमति देता है. इससे, एएए नेटवर्क के अंदर कई प्रॉक्सी के ज़रिए साफ़ तौर पर राउटिंग की जा सकती है. इस बारे में ज़्यादा जानने के लिए, आरएफ़सी 7542 देखें.Android 12 में, पीपीएस-एमओ एक्सटेंशन के लिए, डब्ल्यूबीए के स्पेसिफ़िकेशन के मुताबिक यह सुविधा लागू की गई है. पासपॉइंट नेटवर्क का सुझाव देने वाले ऐप्लिकेशन को, सबसे पहले इस एपीआई को कॉल करना होगा, ताकि यह पक्का किया जा सके कि डिवाइस इस सुविधा के साथ काम करता है. अगर डिवाइस इस सुविधा के साथ काम नहीं करता है, तो आइडेंटिटी डेकोरेट नहीं की जाएगी. साथ ही, नेटवर्क से पुष्टि करने में समस्या आ सकती है.
पासपॉइंट का सुझाव देने के लिए, ऐप्लिकेशन को
PasspointConfiguration,
Credential, और
HomeSp क्लास का इस्तेमाल करना होगा. इन
क्लास में, पासपॉइंट प्रोफ़ाइल के बारे में बताया गया है. इसे वाई-फ़ाई अलायंस
पासपॉइंट
स्पेसिफ़िकेशन में तय किया गया है.
यहां दिए गए कोड सैंपल में, एक खुले, एक डब्ल्यूपीए2, एक डब्ल्यूपीए3 नेटवर्क, और एक पासपॉइंट नेटवर्क के लिए क्रेडेंशियल देने का तरीका बताया गया है:
Kotlin
val suggestion1 = WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion2 = WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestion3 = WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val passpointConfig = PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration val suggestion4 = WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); val suggestionsList = listOf(suggestion1, suggestion2, suggestion3, suggestion4); val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager; val status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here } // Optional (Wait for post connection broadcast to one of your suggestions) val intentFilter = IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); val broadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (!intent.action.equals(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here } }; context.registerReceiver(broadcastReceiver, intentFilter);
Java
final WifiNetworkSuggestion suggestion1 = new WifiNetworkSuggestion.Builder() .setSsid("test111111") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion2 = new WifiNetworkSuggestion.Builder() .setSsid("test222222") .setWpa2Passphrase("test123456") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final WifiNetworkSuggestion suggestion3 = new WifiNetworkSuggestion.Builder() .setSsid("test333333") .setWpa3Passphrase("test6789") .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final PasspointConfiguration passpointConfig = new PasspointConfiguration(); // configure passpointConfig to include a valid Passpoint configuration final WifiNetworkSuggestion suggestion4 = new WifiNetworkSuggestion.Builder() .setPasspointConfig(passpointConfig) .setIsAppInteractionRequired(true) // Optional (Needs location permission) .build(); final List<WifiNetworkSuggestion> suggestionsList = new ArrayList<WifiNetworkSuggestion> {{ add(suggestion1); add(suggestion2); add(suggestion3); add(suggestion4); }}; final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); final int status = wifiManager.addNetworkSuggestions(suggestionsList); if (status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) { // do error handling here… } // Optional (Wait for post connection broadcast to one of your suggestions) final IntentFilter intentFilter = new IntentFilter(WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION); final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (!intent.getAction().equals( WifiManager.ACTION_WIFI_NETWORK_SUGGESTION_POST_CONNECTION)) { return; } // do post connect processing here... } }; context.registerReceiver(broadcastReceiver, intentFilter);
जब कोई ऐप्लिकेशन पहली बार सुझाव देता है, तो उपयोगकर्ता को इसकी सूचना मिलती है. सूचना का टाइप, डिवाइस पर चल रहे Android के वर्शन पर निर्भर करता है:
- Android 11 (एपीआई लेवल 30) और इसके बाद के वर्शन पर, अगर ऐप्लिकेशन फ़ोरग्राउंड में चल रहा है, तो उपयोगकर्ता को एक डायलॉग दिखता है. वहीं, अगर ऐप्लिकेशन बैकग्राउंड में चल रहा है, तो उपयोगकर्ता को एक सूचना दिखती है.
- Android 10 (एपीआई लेवल 29) पर, उपयोगकर्ता को एक सूचना दिखती है. भले ही, ऐप्लिकेशन फ़ोरग्राउंड में चल रहा हो या बैकग्राउंड में.
जब प्लैटफ़ॉर्म, नेटवर्क के किसी सुझाव से कनेक्ट होता है, तो सेटिंग में एक टेक्स्ट दिखता है. इससे पता चलता है कि नेटवर्क कनेक्शन, सुझाव देने वाले किस ऐप्लिकेशन से है.
उपयोगकर्ता के डिसकनेक्ट करने की कार्रवाई को मैनेज करना
अगर उपयोगकर्ता, वाई-फ़ाई पिकर का इस्तेमाल करके, नेटवर्क के किसी सुझाव से साफ़ तौर पर डिसकनेक्ट करता है, तो उस नेटवर्क को अनदेखा कर दिया जाता है. भले ही, वह नेटवर्क अब भी रेंज में हो. इस दौरान, उस नेटवर्क को अपने-आप कनेक्ट करने के लिए नहीं चुना जाएगा. भले ही, ऐप्लिकेशन उस नेटवर्क के सुझाव को हटाकर फिर से जोड़ दे. अगर उपयोगकर्ता, वाई-फ़ाई पिकर का इस्तेमाल करके, किसी ऐसे नेटवर्क से साफ़ तौर पर कनेक्ट करता है जो पहले डिसकनेक्ट किया गया था, तो उस नेटवर्क को तुरंत अपने-आप कनेक्ट करने के लिए चुना जाएगा.
ऐप्लिकेशन के लिए अनुमति के स्टेटस में बदलाव करना
नेटवर्क के सुझाव की सूचना को अस्वीकार करने पर, ऐप्लिकेशन से
CHANGE_WIFI_STATE की अनुमति हट जाती है. उपयोगकर्ता, वाई-फ़ाई कंट्रोल मेन्यू (सेटिंग >
ऐप्लिकेशन और सूचनाएं > ऐप्लिकेशन के लिए खास
ऐक्सेस > वाई-फ़ाई कंट्रोल > App name) में जाकर, बाद में यह अनुमति दे सकता है.