Android पर उपयोगकर्ता की जगह की जानकारी का अनुरोध करने के कई तरीके हैं. इस्तेमाल के उदाहरण के हिसाब से, सबसे सही तरीका अलग-अलग होता है. इस गाइड में, जगह की जानकारी के ऐक्सेस से जुड़ी अलग-अलग स्थितियों के बारे में बताया गया है. साथ ही, हर स्थिति में जगह की जानकारी की अनुमति का अनुरोध करने का तरीका बताया गया है.
शुरू करने के लिए, रनटाइम की सभी अनुमतियों के लिए सबसे सही तरीके देखें. साथ ही, अनुमतियों के अनुरोधों को कम करने के लिए ज़्यादा दिशा-निर्देश देखें.
जगह की जानकारी के ऐक्सेस के टाइप
हर अनुमति में, इनमें से कुछ विशेषताएं शामिल होती हैं:
- कैटगरी: फ़ोरग्राउंड में जगह की जानकारी या बैकग्राउंड में जगह की जानकारी.
- सटीक जानकारी: जगह की सटीक जानकारी या अनुमानित जानकारी.
फ़ोरग्राउंड में जगह की जानकारी
अगर आपके ऐप्लिकेशन में कोई ऐसी सुविधा है जो जगह की जानकारी को सिर्फ़ एक बार या तय समय के लिए शेयर करती है या उसे ऐक्सेस करती है, तो उस सुविधा को फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति चाहिए. ऐसे प्रॉडक्ट के कुछ उदाहरण जिन पर पाबंदियां लगी होती हैं:
- नेविगेशन ऐप्लिकेशन में मौजूद एक सुविधा की मदद से, उपयोगकर्ता मोड़-दर-मोड़ निर्देश पा सकते हैं.
- किसी मैसेजिंग ऐप्लिकेशन में मौजूद एक सुविधा, उपयोगकर्ताओं को अपनी मौजूदा जगह की जानकारी को अन्य उपयोगकर्ता के साथ शेयर करने की अनुमति देती है.
सिस्टम यह मानता है कि आपका ऐप्लिकेशन, फ़ोरग्राउंड में जगह की जानकारी का इस्तेमाल कर रहा है. ऐसा तब होता है, जब आपके ऐप्लिकेशन की कोई सुविधा, इनमें से किसी एक स्थिति में डिवाइस की मौजूदा जगह की जानकारी को ऐक्सेस करती है:
- आपके ऐप्लिकेशन से जुड़ी कोई गतिविधि दिख रही है.
आपका ऐप्लिकेशन, फ़ोरग्राउंड सेवा चला रहा है. जब कोई फ़ोरग्राउंड सेवा चल रही होती है, तो सिस्टम लगातार सूचना दिखाकर उपयोगकर्ता को इसकी जानकारी देता है. आपका ऐप्लिकेशन बैकग्राउंड में होने पर भी ऐक्सेस बनाए रखता है. जैसे, जब उपयोगकर्ता अपने डिवाइस पर होम बटन दबाता है या अपने डिवाइस का डिसप्ले बंद करता है.
इसके अलावा, आपको
locationके फ़ोरग्राउंड सेवा के टाइप का एलान करना चाहिए, जैसा कि यहां दिए गए कोड स्निपेट में दिखाया गया है. Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन पर, आपको फ़ोरग्राउंड सेवा के इस टाइप का एलान करना होगा.<!-- Recommended for Android 9 (API level 28) and lower. --> <!-- Required for Android 10 (API level 29) and higher. --> <service android:name="MyNavigationService" android:foregroundServiceType="location" ... > <!-- Any inner elements would go here. --> </service>
फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करने की ज़रूरत का एलान तब किया जाता है, जब आपका ऐप्लिकेशन ACCESS_COARSE_LOCATION या ACCESS_FINE_LOCATION अनुमति का अनुरोध करता है. इसके बारे में यहां दिए गए स्निपेट में बताया गया है:
<manifest ... >
<!-- Always include this permission -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Include only if your app benefits from precise location access. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
एक बार ऐक्सेस करने की अनुमति फ़ोरग्राउंड में जगह की जानकारी का डेटा ऐक्सेस करने के अलावा, कुछ इस्तेमाल के उदाहरणों में ऐप्लिकेशन को उपयोगकर्ता की जगह की जानकारी को सिर्फ़ कुछ खास मौकों पर ऐप्लिकेशन इस्तेमाल करने के अनुभव के दौरान ऐक्सेस करने की ज़रूरत होती है. ऐसा तब होता है, जब ऐप्लिकेशन के इस्तेमाल के दौरान जगह की जानकारी को लगातार अपडेट करने की ज़रूरत नहीं होती. ऐसे मामलों में, ऐप्लिकेशन को लोकेशन शेयर करने के बटन का इस्तेमाल करना चाहिए, ताकि ऐप्लिकेशन के इस्तेमाल के उस सेशन के लिए जगह की जानकारी का ऐक्सेस मांगा जा सके. इसके अलावा, अगर आपका ऐप्लिकेशन Android 17 (एपीआई लेवल 37) या इसके बाद के वर्शन को टारगेट करता है और उसमें सिर्फ़ ऐसी सुविधाएं शामिल हैं जिनके लिए सेशन के हिसाब से जगह की जानकारी ऐक्सेस करने की ज़रूरत होती है, तो Google Play की नीति के तहत आपको लोकेशन बटन का इस्तेमाल करना होगा. ज़्यादा जानकारी के लिए, लोकेशन बटन की नीति देखें.
बैकग्राउंड में लोकेशन ऐक्सेस करना
अगर ऐप्लिकेशन में मौजूद कोई सुविधा, अन्य उपयोगकर्ताओं के साथ लगातार जगह की जानकारी शेयर करती है या Geofencing API का इस्तेमाल करती है, तो ऐप्लिकेशन को बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की ज़रूरत होती है. इसके कुछ उदाहरण यहां दिए गए हैं:
- परिवार के सदस्यों के साथ जगह की जानकारी शेयर करने वाले ऐप्लिकेशन में, एक ऐसी सुविधा होती है जिससे उपयोगकर्ता लगातार अपनी जगह की जानकारी शेयर कर सकते हैं.
- किसी IoT ऐप्लिकेशन में मौजूद एक सुविधा की मदद से, उपयोगकर्ता अपने होम डिवाइसों को इस तरह कॉन्फ़िगर कर सकते हैं कि वे घर से बाहर जाने पर बंद हो जाएं और घर वापस आने पर चालू हो जाएं.
अगर आपका ऐप्लिकेशन, फ़ोरग्राउंड में जगह की जानकारी सेक्शन में बताई गई स्थितियों के अलावा, किसी भी अन्य स्थिति में डिवाइस की मौजूदा जगह की जानकारी को ऐक्सेस करता है, तो सिस्टम यह मानता है कि आपका ऐप्लिकेशन, बैकग्राउंड में जगह की जानकारी का इस्तेमाल कर रहा है. बैकग्राउंड में जगह की जानकारी की सटीक जानकारी, फ़ोरग्राउंड में जगह की जानकारी की सटीक जानकारी के जैसी ही होती है. यह जगह की जानकारी की उन अनुमतियों पर निर्भर करती है जिनका एलान आपका ऐप्लिकेशन करता है.
Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन पर, आपको अपने ऐप्लिकेशन के मेनिफ़ेस्ट में ACCESS_BACKGROUND_LOCATION अनुमति का एलान करना होगा. ऐसा करने पर ही, रनटाइम के दौरान बैकग्राउंड में जगह की जानकारी ऐक्सेस करने का अनुरोध किया जा सकेगा. Android के पुराने वर्शन पर, जब आपके ऐप्लिकेशन को फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति मिलती है, तो उसे बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति भी अपने-आप मिल जाती है.
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
सटीकता
Android पर, जगह की सटीक जानकारी के ये लेवल इस्तेमाल किए जा सकते हैं:
- आस-पास
- इससे डिवाइस की जगह की अनुमानित जानकारी मिलती है. अगर जगह की जानकारी का यह अनुमान
LocationManagerServiceयाFusedLocationProviderसे मिला है, तो यह अनुमान करीब तीन वर्ग किलोमीटर (करीब 1.2 वर्ग मील) के दायरे में सटीक होता है.ACCESS_COARSE_LOCATIONअनुमति का एलान करने पर, आपके ऐप्लिकेशन को इस लेवल की सटीक जगह की जानकारी मिल सकती है. हालांकि, इसके लिएACCESS_FINE_LOCATIONअनुमति का एलान नहीं करना होगा. - सटीक
- डिवाइस की जगह की जानकारी का अनुमान देता है, जो ज़्यादा से ज़्यादा सटीक होता है.
अगर जगह की जानकारी का अनुमान
LocationManagerServiceयाFusedLocationProviderसे लगाया जाता है, तो आम तौर पर यह अनुमान करीब 50 मीटर (160 फ़ीट) के दायरे में होता है. कभी-कभी यह अनुमान कुछ मीटर (10 फ़ीट) या इससे भी कम दायरे में होता है.ACCESS_FINE_LOCATIONअनुमति का एलान करने पर, आपके ऐप्लिकेशन को इस लेवल की सटीक जानकारी मिल सकती है.
अगर उपयोगकर्ता, जगह की अनुमानित जानकारी से जुड़ी अनुमति देता है, तो आपके ऐप्लिकेशन के पास सिर्फ़ जगह की अनुमानित जानकारी का ऐक्सेस होगा. भले ही, आपके ऐप्लिकेशन ने जगह की जानकारी से जुड़ी कोई भी अनुमति मांगी हो.
अगर उपयोगकर्ता ने जगह की अनुमानित जानकारी ऐक्सेस करने की अनुमति दी है, तो भी आपका ऐप्लिकेशन काम करना चाहिए. अगर आपके ऐप्लिकेशन की किसी सुविधा को ACCESS_FINE_LOCATION अनुमति का इस्तेमाल करके, जगह की सटीक जानकारी ऐक्सेस करने की ज़रूरत है, तो उपयोगकर्ता से आपके ऐप्लिकेशन को जगह की सटीक जानकारी ऐक्सेस करने की अनुमति देने के लिए कहा जा सकता है.
बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति देने के बारे में रिमाइंडर
Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन पर, जब आपके ऐप्लिकेशन की कोई सुविधा पहली बार बैकग्राउंड में डिवाइस की जगह की जानकारी ऐक्सेस करती है, तो सिस्टम उपयोगकर्ता को सूचना भेजने के लिए शेड्यूल करता है. ऐसा तब होता है, जब उपयोगकर्ता बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति देता है. इस सूचना से उपयोगकर्ता को याद दिलाया जाता है कि उसने आपके ऐप्लिकेशन को डिवाइस की जगह की जानकारी का ऐक्सेस हमेशा के लिए दिया है. इमेज 8 में सूचना का एक उदाहरण दिखाया गया है.
अपने ऐप्लिकेशन की एसडीके डिपेंडेंसी में, जगह की जानकारी से जुड़ी ज़रूरी शर्तें देखना
देखें कि आपका ऐप्लिकेशन, जगह की जानकारी की अनुमतियों पर निर्भर करने वाले किसी SDK टूल का इस्तेमाल करता है या नहीं. खास तौर पर, ACCESS_FINE_LOCATION अनुमति का इस्तेमाल करने वाले SDK टूल. ज़्यादा जानकारी के लिए, Medium पर अपने एसडीके टूल की डिपेंडेंसी के व्यवहार के बारे में जानना ब्लॉग पोस्ट देखें.
अन्य संसाधन
Android में जगह की जानकारी की अनुमतियों के बारे में ज़्यादा जानने के लिए, यह कॉन्टेंट देखें:
कोडलैब
वीडियो
सैंपल
- सैंपल के तौर पर मिला ऐप्लिकेशन, जिससे जगह की जानकारी की अनुमतियों के इस्तेमाल को दिखाया जा सके.