जगह की जानकारी की अनुमतियों का अनुरोध करें

उपयोगकर्ता की निजता की सुरक्षा के लिए, जगह की जानकारी का इस्तेमाल करने वाले ऐप्लिकेशन को जगह की जानकारी की अनुमतियों का अनुरोध करना होगा.

जगह की जानकारी की अनुमतियों का अनुरोध करते समय, उन सबसे सही तरीकों का पालन करें जो किसी भी अन्य रनटाइम की अनुमति के लिए अपनाए जाते हैं. जगह की जानकारी की अनुमतियों के मामले में एक अहम अंतर यह है कि सिस्टम में जगह की जानकारी से जुड़ी कई अनुमतियां शामिल होती हैं. आपको किन अनुमतियों का अनुरोध करना है और कैसे करना है, यह इस बात पर निर्भर करता है कि आपके ऐप्लिकेशन के इस्तेमाल के उदाहरण के लिए, जगह की जानकारी की ज़रूरी शर्तें क्या हैं.

इस पेज पर, जगह की जानकारी से जुड़ी अलग-अलग ज़रूरी शर्तों के बारे में बताया गया है. साथ ही, हर मामले में जगह की जानकारी की अनुमतियों का अनुरोध करने का तरीका भी बताया गया है.

जगह की जानकारी को ऐक्सेस करने के तरीके

हर अनुमति में ये बातें शामिल होती हैं:

फ़ोरग्राउंड में जगह की जानकारी

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

  • नेविगेशन ऐप्लिकेशन में मौजूद एक सुविधा की मदद से, उपयोगकर्ताओं को मोड़-दर-मोड़ निर्देश मिलते हैं.
  • मैसेजिंग ऐप्लिकेशन में मौजूद एक सुविधा की मदद से, उपयोगकर्ता अपनी मौजूदा जगह की जानकारी किसी दूसरे उपयोगकर्ता के साथ शेयर कर सकते हैं.

अगर आपके ऐप्लिकेशन की कोई सुविधा, इनमें से किसी स्थिति में डिवाइस की मौजूदा जगह की जानकारी ऐक्सेस करती है, तो सिस्टम यह मानता है कि आपका ऐप्लिकेशन फ़ोरग्राउंड में जगह की जानकारी का इस्तेमाल कर रहा है:

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

    इसके अलावा, हमारा सुझाव है कि आप 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>
    

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

<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>

बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की सुविधा

अगर ऐप्लिकेशन में मौजूद कोई सुविधा, लगातार दूसरे लोगों के साथ जगह की जानकारी शेयर करती आ रही है या Geofence 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 अनुमति का इस्तेमाल करके, जगह की सटीक जानकारी का ऐक्सेस ज़रूर चाहिए, तो उपयोगकर्ता से अपने ऐप्लिकेशन को जगह की सटीक जानकारी ऐक्सेस करने की अनुमति दें कहें.

रनटाइम के दौरान जगह की जानकारी ऐक्सेस करने का अनुरोध करें

जब आपके ऐप्लिकेशन की किसी सुविधा को जगह की जानकारी का ऐक्सेस चाहिए, तो अनुमति का अनुरोध करने से पहले, तब तक इंतज़ार करें, जब तक उपयोगकर्ता उस सुविधा के साथ इंटरैक्ट न कर ले. यह वर्कफ़्लो, ऐप्लिकेशन की अनुमतियों का अनुरोध करने के तरीके के बारे में बताने वाली गाइड में बताए गए, संदर्भ के हिसाब से रनटाइम की अनुमतियां मांगने के सबसे सही तरीके का पालन करता है.

पहली इमेज में, इस प्रोसेस को पूरा करने का उदाहरण दिया गया है. ऐप्लिकेशन में "जगह की जानकारी शेयर करें" सुविधा है. इसके लिए, फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करना ज़रूरी है. हालांकि, ऐप्लिकेशन तब तक जगह की जानकारी की अनुमति का अनुरोध नहीं करता, जब तक उपयोगकर्ता जगह की जानकारी शेयर करें बटन को नहीं चुनता.

जब उपयोगकर्ता &#39;जगह की जानकारी शेयर करें&#39; बटन चुनता है, तो सिस्टम
    में जगह की जानकारी की अनुमति वाला डायलॉग बॉक्स दिखता है
पहली इमेज. जगह की जानकारी शेयर करने की ऐसी सुविधा जिसके लिए फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करना ज़रूरी है. यह सुविधा तब चालू होती है, जब उपयोगकर्ता सिर्फ़ ऐप्लिकेशन इस्तेमाल करते समय अनुमति दें चुनता है.

उपयोगकर्ता सिर्फ़ जगह की अनुमानित जानकारी दे सकता है

Android 12 (एपीआई लेवल 31) या उसके बाद के वर्शन पर, उपयोगकर्ता आपके ऐप्लिकेशन से अनुरोध कर सकते हैं कि वह सिर्फ़ जगह की अनुमानित जानकारी ऐक्सेस करे. भले ही, आपका ऐप्लिकेशन ACCESS_FINE_LOCATION के लिए रनटाइम की अनुमति का अनुरोध करता हो.

उपयोगकर्ता के इस संभावित व्यवहार को मैनेज करने के लिए, ACCESS_FINE_LOCATION की अनुमति का अनुरोध ही न करें. इसके बजाय, एक ही रनटाइम अनुरोध में ACCESS_FINE_LOCATION अनुमति और ACCESS_COARSE_LOCATION अनुमति, दोनों का अनुरोध करें. अगर सिर्फ़ ACCESS_FINE_LOCATION का अनुरोध किया जाता है, तो सिस्टम Android 12 के कुछ रिलीज़ पर अनुरोध को अनदेखा कर देता है. अगर आपका ऐप्लिकेशन Android 12 या उसके बाद वाले वर्शन को टारगेट करता है, तो सिस्टम Logcat में गड़बड़ी के इस मैसेज को लॉग करता है:

ACCESS_FINE_LOCATION must be requested with ACCESS_COARSE_LOCATION.

जब आपका ऐप्लिकेशन ACCESS_FINE_LOCATION और ACCESS_COARSE_LOCATION, दोनों के लिए अनुरोध करता है, तो सिस्टम की अनुमतियों वाले डायलॉग में उपयोगकर्ता के लिए ये विकल्प शामिल होते हैं:

  • सटीक: इससे आपके ऐप्लिकेशन को जगह की सटीक जानकारी मिलती है.
  • अनुमानित: इससे आपका ऐप्लिकेशन, जगह की सिर्फ़ अनुमानित जानकारी हासिल कर पाता है.

तीसरी इमेज से पता चलता है कि डायलॉग बॉक्स में दोनों विकल्पों के लिए विज़ुअल संकेत मौजूद हैं, ताकि उपयोगकर्ता को विकल्प चुनने में मदद मिल सके. जगह कितनी सटीक है, यह तय करने के बाद उपयोगकर्ता, तीन में से किसी एक बटन पर टैप करके अनुमति देने की अवधि चुन सकते हैं.

Android 12 और उसके बाद के वर्शन में, उपयोगकर्ता किसी भी ऐप्लिकेशन के लिए जगह की जानकारी की सटीकता सेट करने के लिए, सिस्टम सेटिंग पर जा सकते हैं. भले ही, उस ऐप्लिकेशन के लिए टारगेट SDK टूल का कोई भी वर्शन इस्तेमाल किया जा रहा हो. यह तब भी लागू होता है, जब आपका ऐप्लिकेशन Android 11 या इससे पहले के वर्शन वाले डिवाइस पर इंस्टॉल हो और उपयोगकर्ता अपने डिवाइस को Android 12 या इसके बाद के वर्शन पर अपग्रेड कर दे.

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

उपयोगकर्ता की पसंद से, अनुमतियों पर असर पड़ता है

इस टेबल में, उन अनुमतियों के बारे में बताया गया है जिन्हें सिस्टम आपके ऐप्लिकेशन को देता है. ये अनुमतियां, उपयोगकर्ता के चुने गए विकल्पों के आधार पर दी जाती हैं. ये विकल्प, अनुमतियों के रनटाइम डायलॉग में चुने जाते हैं:

सटीक आस-पास
ऐप्लिकेशन इस्तेमाल करते समय ACCESS_FINE_LOCATION और
ACCESS_COARSE_LOCATION
ACCESS_COARSE_LOCATION
सिर्फ़ इस बार अनुमति दें ACCESS_FINE_LOCATION और
ACCESS_COARSE_LOCATION
ACCESS_COARSE_LOCATION
अस्वीकार करें जगह की जानकारी की अनुमतियां नहीं दी गई हैं जगह की जानकारी की अनुमतियां नहीं दी गई हैं

यह पता लगाने के लिए कि सिस्टम ने आपके ऐप्लिकेशन को कौनसी अनुमतियां दी हैं, अनुमतियों के अपने अनुरोध की रिटर्न वैल्यू देखें. यहां दिए गए कोड की तरह के कोड में, Jetpack लाइब्रेरी का इस्तेमाल किया जा सकता है. इसके अलावा, प्लैटफ़ॉर्म लाइब्रेरी का इस्तेमाल भी किया जा सकता है. इन लाइब्रेरी में, अनुमति के अनुरोध वाले कोड को खुद मैनेज किया जा सकता है.

Kotlin

val locationPermissionRequest = registerForActivityResult(
        ActivityResultContracts.RequestMultiplePermissions()
    ) { permissions ->
        when {
            permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> {
                // Precise location access granted.
            }
            permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> {
                // Only approximate location access granted.
            } else -> {
                // No location access granted.
            }
        }
    }

// ...

// Before you perform the actual permission request, check whether your app
// already has the permissions, and whether your app needs to show a permission
// rationale dialog. For more details, see Request permissions.
locationPermissionRequest.launch(arrayOf(
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_COARSE_LOCATION))

Java

ActivityResultLauncher<String[]> locationPermissionRequest =
    registerForActivityResult(new ActivityResultContracts
        .RequestMultiplePermissions(), result -> {
            Boolean fineLocationGranted = result.getOrDefault(
                    Manifest.permission.ACCESS_FINE_LOCATION, false);
            Boolean coarseLocationGranted = result.getOrDefault(
                    Manifest.permission.ACCESS_COARSE_LOCATION,false);
            if (fineLocationGranted != null && fineLocationGranted) {
                // Precise location access granted.
            } else if (coarseLocationGranted != null && coarseLocationGranted) {
                // Only approximate location access granted.
            } else {
                // No location access granted.
            }
        }
    );

// ...

// Before you perform the actual permission request, check whether your app
// already has the permissions, and whether your app needs to show a permission
// rationale dialog. For more details, see Request permissions.
locationPermissionRequest.launch(new String[] {
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_COARSE_LOCATION
});

जगह की सटीक जानकारी पर अपग्रेड करने का अनुरोध करें

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

उपयोगकर्ता से अनुरोध करें कि वह आपके ऐप्लिकेशन के लिए, जगह की जानकारी के अनुमानित ऐक्सेस को सटीक ऐक्सेस में अपग्रेड करे. इसके लिए, यह तरीका अपनाएं:

  1. अगर ज़रूरी हो, तो बताएं कि आपके ऐप्लिकेशन को अनुमति क्यों चाहिए.
  2. ACCESS_FINE_LOCATION और ACCESS_COARSE_LOCATION की अनुमतियों के लिए फिर से अनुरोध करें. उपयोगकर्ता ने पहले ही सिस्टम को आपके ऐप्लिकेशन को जगह की अनुमानित जानकारी देने की अनुमति दे दी है. इसलिए, इस बार सिस्टम डायलॉग अलग है, जैसा कि चित्र 4 और चित्र 5 में दिखाया गया है:
डायलॉग में &#39;जगह की सटीक जानकारी में बदलें&#39;, &#39;सिर्फ़ इस बार&#39;, और &#39;अस्वीकार करें&#39; विकल्प होते हैं.
चौथी इमेज. उपयोगकर्ता ने पहले तीसरे चित्र के डायलॉग में, अनुमानित और ऐप्लिकेशन इस्तेमाल करते समय को चुना था.
डायलॉग बॉक्स में, &#39;सिर्फ़ इस बार&#39; और
         &#39;अनुमति न दें&#39; विकल्प होते हैं.
पांचवीं इमेज. उपयोगकर्ता ने पहले तीसरे चित्र के डायलॉग में, अनुमानित और सिर्फ़ इस बार को चुना था.

शुरुआत में, सिर्फ़ फ़ोरग्राउंड लोकेशन का अनुरोध करें

भले ही, आपके ऐप्लिकेशन की कई सुविधाओं के लिए जगह की जानकारी के ऐक्सेस की ज़रूरत हो, फिर भी इनमें से कुछ ही सुविधाओं को बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की ज़रूरत हो सकती है. इसलिए, हमारा सुझाव है कि आपका ऐप्लिकेशन जगह की जानकारी की अनुमतियों के लिए बढ़ते अनुरोध करता रहे. इसके लिए, पहले फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करने का अनुरोध करें और फिर बैकग्राउंड में जगह की जानकारी ऐक्सेस करने का अनुरोध करें. ज़्यादा अनुमति मांगने की सुविधा का इस्तेमाल करके, उपयोगकर्ताओं को ज़्यादा कंट्रोल और पारदर्शिता मिलती है. ऐसा इसलिए, क्योंकि वे बेहतर तरीके से समझ सकते हैं कि आपके ऐप्लिकेशन की किन सुविधाओं को बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की ज़रूरत है.

छठी इमेज में, ऐसे ऐप्लिकेशन का उदाहरण दिया गया है जिसे इंक्रीमेंटल अनुरोधों को मैनेज करने के लिए डिज़ाइन किया गया है. "मौजूदा जगह की जानकारी दिखाएं" और "आस-पास की जगहों के सुझाव दें", दोनों सुविधाओं के लिए फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करना ज़रूरी है. हालांकि, सिर्फ़ "आस-पास की जगहों के सुझाव" वाली सुविधा के लिए, बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की ज़रूरत होती है.

फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करने की सुविधा चालू करने वाला बटन,
 बैकग्राउंड में जगह की जानकारी की सुविधा को चालू करने वाले बटन से आधी स्क्रीन की दूरी पर होता है
छठी इमेज. दोनों सुविधाओं के लिए जगह की जानकारी का ऐक्सेस ज़रूरी है. हालांकि, "आस-पास की सुविधाओं के सुझाव" सुविधा के लिए, बैकग्राउंड में जगह की जानकारी का ऐक्सेस ज़रूरी है.

इंक्रीमेंटल अनुरोध करने की प्रोसेस इस तरह है:

  1. सबसे पहले, आपके ऐप्लिकेशन को उपयोगकर्ताओं को उन सुविधाओं के बारे में बताना चाहिए जिनके लिए फ़ोरग्राउंड में जगह की जानकारी का ऐक्सेस ज़रूरी है. उदाहरण के लिए, पहली इमेज में "जगह की जानकारी शेयर करें" सुविधा या दूसरी इमेज में "मौजूदा जगह दिखाएं" सुविधा.

    हमारा सुझाव है कि जब तक आपके ऐप्लिकेशन को फ़ोरग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति न मिल जाए, तब तक आप उन सुविधाओं के लिए उपयोगकर्ता का ऐक्सेस बंद कर दें जिनके लिए बैकग्राउंड में जगह की जानकारी ऐक्सेस करना ज़रूरी है.

  2. बाद में, जब उपयोगकर्ता ऐसे फ़ंक्शन को एक्सप्लोर करता है जिसके लिए बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की ज़रूरत होती है, तो आपके पास बैकग्राउंड में जगह की जानकारी ऐक्सेस करने का अनुरोध करने का विकल्प होता है.

अगर ज़रूरी हो, तो बैकग्राउंड में जगह की जानकारी ऐक्सेस करने का अनुरोध करें

सातवीं इमेज. सेटिंग पेज में, हमेशा के लिए अनुमति दें नाम का एक विकल्प होता है. यह विकल्प, बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति देता है.

अनुमति के डायलॉग बॉक्स का कॉन्टेंट, टारगेट किए जा रहे SDK टूल के वर्शन पर निर्भर करता है

जब आपके ऐप्लिकेशन की कोई सुविधा, Android 10 (एपीआई लेवल 29) पर चलने वाले डिवाइस पर बैकग्राउंड में जगह की जानकारी का अनुरोध करती है, तो सिस्टम की अनुमतियों वाले डायलॉग में हमेशा के लिए अनुमति दें का विकल्प शामिल होता है. अगर उपयोगकर्ता यह विकल्प चुनता है, तो आपके ऐप्लिकेशन की सुविधा को बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की सुविधा मिल जाती है.

हालांकि, Android 11 (एपीआई लेवल 30) और उसके बाद के वर्शन पर, सिस्टम डायलॉग में हमेशा के लिए अनुमति दें विकल्प शामिल नहीं है. इसके बजाय, उपयोगकर्ताओं को सेटिंग पेज पर बैकग्राउंड में जगह की जानकारी ट्रैक करने की सुविधा चालू करनी होगी, जैसा कि सातवें चित्र में दिखाया गया है.

बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति का अनुरोध करते समय, सबसे सही तरीकों को अपनाकर, उपयोगकर्ताओं को इस सेटिंग पेज पर जाने में मदद की जा सकती है. अनुमति देने की प्रोसेस, आपके ऐप्लिकेशन के टारगेट SDK टूल के वर्शन पर निर्भर करती है.

ऐप्लिकेशन, Android 11 या उसके बाद के वर्शन को टारगेट करता है

अगर आपके ऐप्लिकेशन को ACCESS_BACKGROUND_LOCATION की अनुमति नहीं मिली है और shouldShowRequestPermissionRationale() true दिखाता है, तो उन उपयोगकर्ताओं को शिक्षा से जुड़ा यूज़र इंटरफ़ेस (यूआई) दिखाएं जिसमें ये शामिल हों:

  • इस बारे में साफ़ तौर पर जानकारी दें कि आपके ऐप्लिकेशन की सुविधा को बैकग्राउंड में जगह की जानकारी का ऐक्सेस क्यों चाहिए.
  • बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति देने वाले सेटिंग विकल्प का वह लेबल जो उपयोगकर्ता को दिखता है. उदाहरण के लिए, इमेज 7 में हमेशा के लिए अनुमति दें. यह लेबल पाने के लिए, getBackgroundPermissionOptionLabel() पर कॉल करें. इस तरीके से मिलने वाले नतीजे की वैल्यू, उपयोगकर्ता के डिवाइस की भाषा की सेटिंग के हिसाब से तय होती है.
  • उपयोगकर्ताओं के लिए, अनुमति को अस्वीकार करने का विकल्प. अगर उपयोगकर्ता बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति नहीं देते, तो भी वे आपके ऐप्लिकेशन का इस्तेमाल कर पाएंगे.
उपयोगकर्ता किसी ऐप्लिकेशन की जगह की जानकारी की सेटिंग बदलने के लिए, सिस्टम की सूचना पर टैप कर सकते हैं
आठवां डायग्राम. सूचना से उपयोगकर्ता को याद दिलाया जाता है कि उन्होंने किसी ऐप्लिकेशन के बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति दी है.

ऐप्लिकेशन, Android 10 या इससे पहले के वर्शन को टारगेट करता है

जब आपके ऐप्लिकेशन में कोई सुविधा बैकग्राउंड में जगह की जानकारी ऐक्सेस करने का अनुरोध करती है, तो उपयोगकर्ताओं को सिस्टम डायलॉग दिखता है. इस डायलॉग बॉक्स में, सेटिंग पेज पर अपने ऐप्लिकेशन की जगह की जानकारी ऐक्सेस करने की अनुमति के विकल्पों पर जाने का विकल्प शामिल होता है.

अगर आपका ऐप्लिकेशन, जगह की जानकारी की अनुमतियों का अनुरोध करने के लिए सबसे सही तरीकों का पहले से ही पालन करता है, तो आपको इस सुविधा के साथ काम करने के लिए कोई बदलाव करने की ज़रूरत नहीं है.

बैकग्राउंड में जगह की जानकारी की सटीक जानकारी पर, उपयोगकर्ता का असर पड़ सकता है

अगर उपयोगकर्ता अनुमानित जगह की जानकारी का अनुरोध करता है, तो 'जगह की जानकारी की अनुमति' वाले डायलॉग में उपयोगकर्ता के चुने गए विकल्प, बैकग्राउंड में जगह की जानकारी के आधार पर भी लागू होते हैं. दूसरे शब्दों में, अगर उपयोगकर्ता आपके ऐप्लिकेशन को ACCESS_BACKGROUND_LOCATION अनुमति देता है, लेकिन फ़ोरग्राउंड में उसकी जगह की अनुमानित जानकारी का ऐक्सेस देता है, तो बैकग्राउंड में भी आपके ऐप्लिकेशन को जगह की अनुमानित जानकारी का ऐक्सेस ही मिलेगा.

बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति का रिमाइंडर

Android 10 और उसके बाद के वर्शन पर, जब उपयोगकर्ता बैकग्राउंड में जगह की जानकारी ऐक्सेस करने की अनुमति देता है, तो आपके ऐप्लिकेशन की कोई सुविधा पहली बार बैकग्राउंड में डिवाइस की जगह की जानकारी ऐक्सेस करती है. इसके बाद, सिस्टम उपयोगकर्ता को सूचना भेजने के लिए शेड्यूल करता है. यह सूचना उपयोगकर्ता को याद दिलाती है कि उन्होंने आपके ऐप्लिकेशन को हमेशा डिवाइस की जगह की जानकारी ऐक्सेस करने की अनुमति दी है. सूचना का उदाहरण, आठवीं इमेज में दिया गया है.

अपने ऐप्लिकेशन के SDK टूल की डिपेंडेंसी में, जगह की जानकारी से जुड़ी ज़रूरी शर्तों की जांच करना

यह पता करें कि आपका ऐप्लिकेशन ऐसे SDK टूल का इस्तेमाल करता है या नहीं जो जगह की जानकारी की अनुमतियों, खास तौर पर ACCESS_FINE_LOCATION अनुमति पर निर्भर करते हैं. अपने SDK टूल की डिपेंडेंसी के बारे में जानने के लिए, Medium पर मौजूद यह लेख पढ़ें.

अन्य संसाधन

Android में जगह की जानकारी की अनुमतियों के बारे में ज़्यादा जानकारी के लिए, ये कॉन्टेंट देखें:

कोड लैब

वीडियो

सैंपल