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

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

पिछले वर्शन और कुछ एपीआई के लिए, जगह की जानकारी ऐक्सेस करने की अनुमति ज़रूरी है

कई Wi-Fi एपीआई के लिए 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) या उसके बाद के वर्शन को टारगेट करने वाला ऐप्लिकेशन, वाई-फ़ाई की जानकारी ऐक्सेस कर सकता है या नहीं.

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

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