आस-पास के वाई-फ़ाई डिवाइसों को ऐक्सेस करने की अनुमति का अनुरोध करें

ऐसे ऐप्लिकेशन जो Android 13 (एपीआई लेवल 33) या उसके बाद के वर्शन को टारगेट करते हैं और वाई-फ़ाई कनेक्शन को मैनेज करते हैं को अनुरोध करना चाहिए NEARBY_WIFI_DEVICES रनटाइम की अनुमति. यह अनुमति से किसी ऐप्लिकेशन को आस-पास के वाई-फ़ाई डिवाइसों के लिए ऐक्सेस देना आसान हो जाता है; हाल ही में, इन ऐप्लिकेशन को ACCESS_FINE_LOCATION तो अनुमति नहीं है.

अनुमति, आस-पास मौजूद डिवाइसों के ग्रुप का हिस्सा है

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 ताकि आपके ऐप्लिकेशन में पुराने सिस्टम के साथ काम करने की सुविधा दी जा सके. हालांकि, अगर आपका ऐप्लिकेशन किसी और तरीके से जगह की सटीक जानकारी, इस अनुमति के SDK टूल के ज़्यादा से ज़्यादा वर्शन को 32 पर सेट करें, जैसा कि कोड स्निपेट पर जाएं:

<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

देखें कि किन एपीआई को अनुमति चाहिए

अगर आपका ऐप्लिकेशन, Android 13 या उसके बाद के वर्शन को टारगेट करता है, तो आपको NEARBY_WIFI_DEVICES को इनमें से किसी भी वाई-फ़ाई एपीआई को कॉल करने की अनुमति:

वाई-फ़ाई ऐक्सेस करने के वर्कफ़्लो

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

पहली इमेज. फ़्लो चार्ट यह तय करने के लिए कि ऐप्लिकेशन, Android 13 (एपीआई लेवल 33) को टारगेट करता है या उसके बाद वाई-फ़ाई की जानकारी ऐक्सेस कर सकता है.

दूसरी इमेज में, दिखाए जा रहे डिवाइसों पर वाई-फ़ाई ऐक्सेस का वर्कफ़्लो दिखाया गया है 12 ली॰ या इससे कम. नोट करें कि भरोसे के साथ ACCESS_FINE_LOCATION की अनुमति.

दूसरी इमेज. फ़्लो चार्ट का इस्तेमाल करके यह पता लगाया जा सकता है कि 12L (एपीआई लेवल 32) या इससे पहले के लेवल को टारगेट करने वाला ऐप्लिकेशन है या नहीं वाई-फ़ाई की जानकारी ऐक्सेस कर सकता है.