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

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) या इससे पहले के वर्शन को टारगेट करने वाला ऐप्लिकेशन Wi-Fi की जानकारी ऐक्सेस कर सकता है या नहीं.