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

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>

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

कई वाई-फ़ाई एपीआई के लिए, 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 अनुमति का एलान करना होगा:

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

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

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

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

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