Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन को टारगेट करने वाले और वाई-फ़ाई कनेक्शन मैनेज करने वाले ऐप्लिकेशन को,
रनटाइम के दौरान
NEARBY_WIFI_DEVICES
अनुमति का अनुरोध करना चाहिए. इस
अनुमति से, आस-पास मौजूद वाई-फ़ाई डिवाइसों को ऐक्सेस करने के लिए, किसी ऐप्लिकेशन के अनुरोध को सही ठहराना आसान हो जाता है.
Android के पिछले वर्शन पर, इन ऐप्लिकेशन को
ACCESS_FINE_LOCATION
अनुमति का एलान करना पड़ता था.
SecurityException
यह अनुमति, आस-पास मौजूद डिवाइसों से कनेक्ट करने की अनुमति के ग्रुप का हिस्सा है
NEARBY_WIFI_DEVICES अनुमति, आस-पास मौजूद डिवाइसों से कनेक्ट करने की अनुमति के ग्रुप का हिस्सा है. Android 12 (एपीआई लेवल 31) में जोड़े गए इस ग्रुप में, ब्लूटूथ और अल्ट्रा-वाइडबैंड से जुड़ी अनुमतियां भी शामिल हैं. इस अनुमति के ग्रुप से, अनुमतियों के किसी भी कॉम्बिनेशन का अनुरोध करने पर, सिस्टम रनटाइम के दौरान एक ही डायलॉग दिखाता है. साथ ही, उपयोगकर्ता से आपके ऐप्लिकेशन को आस-पास मौजूद डिवाइसों को ऐक्सेस करने की अनुमति देने के लिए कहता है.
सिस्टम की सेटिंग में, उपयोगकर्ता को आस-पास मौजूद डिवाइसों से कनेक्ट करने की अनुमति को एक ग्रुप के तौर पर चालू और बंद करना होगा. उदाहरण के लिए, उपयोगकर्ता किसी दिए गए ऐप्लिकेशन के लिए, वाई-फ़ाई ऐक्सेस को बंद नहीं कर सकते, लेकिन ब्लूटूथ ऐक्सेस को चालू रख सकते हैं.
ज़ोर देकर यह दावा करें कि आपका ऐप्लिकेशन, जगह की जानकारी का पता नहीं लगाता
Android 13 या उसके बाद के वर्शन को टारगेट करते समय, इस बात पर विचार करें कि आपका ऐप्लिकेशन, वाई-फ़ाई एपीआई से जगह की जानकारी का पता लगाता है या नहीं. अगर नहीं, तो आपको ज़ोर देकर यह दावा करना चाहिए. यह दावा करने के लिए, अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, usesPermissionFlags एट्रिब्यूट को neverForLocation पर सेट करें. जैसा कि कोड के इस स्निपेट में दिखाया गया है. यह प्रोसेस, उस प्रोसेस जैसी ही है जो तब की जाती है, जब यह दावा किया जाता है कि ब्लूटूथ डिवाइस की जानकारी का इस्तेमाल, जगह की जानकारी के लिए कभी नहीं किया जाता:
<manifest ...> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application ...> ... </application> </manifest>
पिछले वर्शन और कुछ एपीआई के लिए, जगह की जानकारी की अनुमति ज़रूरी है
कई वाई-फ़ाई एपीआई के लिए, ACCESS_FINE_LOCATION अनुमति ज़रूरी है. भले ही, आपका ऐप्लिकेशन Android 13 या उसके बाद के वर्शन को टारगेट करता हो. उदाहरण के लिए, WifiManager क्लास के ये तरीके शामिल हैं:
इसके अलावा, क्योंकि NEARBY_WIFI_DEVICES अनुमति सिर्फ़
Android 13 और उसके बाद के वर्शन पर उपलब्ध है, इसलिए आपको अपने ऐप्लिकेशन में, बैकवर्ड कंपैटिबिलिटी देने के लिए,
ACCESS_FINE_LOCATION
के सभी एलान रखने चाहिए. हालांकि, जब तक आपका ऐप्लिकेशन
जगह की सटीक जानकारी पर निर्भर नहीं करता, तब तक इस अनुमति के लिए, ज़्यादा से ज़्यादा एसडीके वर्शन को 32 पर सेट किया जा सकता है. जैसा कि
कोड के इस स्निपेट में दिखाया गया है:
<manifest ...> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="32" /> <application ...> ... </application> </manifest>
ऐसी एपीआई देखें जिनके लिए अनुमति ज़रूरी है
अगर आपका ऐप्लिकेशन, Android 13 या उसके बाद के वर्शन को टारगेट करता है, तो आपको इनमें से किसी भी वाई-फ़ाई एपीआई को कॉल करने के लिए, NEARBY_WIFI_DEVICES अनुमति का एलान करना होगा:
WifiManagerWifiAwareManagerWifiAwareSessionWifiP2pManagerWifiRttManager
वाई-फ़ाई ऐक्सेस के वर्कफ़्लो
पहले डायग्राम में, Android 13 या उसके बाद के वर्शन पर चलने वाले डिवाइसों पर, वाई-फ़ाई ऐक्सेस का वर्कफ़्लो दिखाया गया है. यह वर्कफ़्लो, Android 13 या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए है. ध्यान दें कि जब तक यह दावा किया जाता है कि आपका ऐप्लिकेशन, वाई-फ़ाई डिवाइस की जानकारी से जगह की जानकारी का पता नहीं लगाता, तब तक आपको ACCESS_FINE_LOCATION अनुमति का एलान करने की ज़रूरत नहीं है:
दूसरे डायग्राम में, 12L या उससे पहले के वर्शन पर चलने वाले डिवाइसों पर, वाई-फ़ाई ऐक्सेस का वर्कफ़्लो दिखाया गया है. ध्यान दें कि ACCESS_FINE_LOCATION अनुमति पर निर्भरता है.