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 में दिखाया गया है.
अपने ऐप्लिकेशन की एसडीके डिपेंडेंसी में, जगह की जानकारी से जुड़ी ज़रूरी शर्तें देखें
देखें कि क्या आपका ऐप्लिकेशन, जगह की जानकारी की अनुमतियों पर निर्भर करने वाले किसी एसडीके का इस्तेमाल करता है. खास तौर पर, ACCESS_FINE_LOCATION अनुमति का इस्तेमाल करता है. ज़्यादा जानकारी के लिए, Medium पर SDK टूल डिपेंडेंसी के व्यवहार के बारे में जानें ब्लॉग पोस्ट पढ़ें.
अन्य संसाधन
Android में जगह की जानकारी की अनुमतियों के बारे में ज़्यादा जानने के लिए, यहां दिया गया कॉन्टेंट देखें:
कोडलैब
वीडियो
सैंपल
- जगह की जानकारी की अनुमतियों के इस्तेमाल को दिखाने के लिए, सैंपल के तौर पर मिला ऐप्लिकेशन.