अंतिम ज्ञात स्थान प्राप्त करना

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

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

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

इस लेसन में, फ़्यूज़्ड लोकेशन प्रोवाइडर में getLastLocation() तरीके का इस्तेमाल करके, किसी डिवाइस की जगह की जानकारी के लिए एक बार अनुरोध करने का तरीका बताया गया है.

Google Play services सेट अप करना

अलग-अलग जगहों की जानकारी देने वाली कंपनी को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन के डेवलपमेंट प्रोजेक्ट में Google Play services शामिल होना चाहिए. SDK मैनेजर की मदद से, Google Play services कॉम्पोनेंट को डाउनलोड और इंस्टॉल करें. साथ ही, अपने प्रोजेक्ट में लाइब्रेरी जोड़ें. ज़्यादा जानकारी के लिए, Google Play की सेवाएं सेट अप करने के बारे में गाइड देखें.

ऐप्लिकेशन की अनुमतियों के बारे में बताएं

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

जगह की जानकारी की सेवाओं का क्लाइंट बनाना

अपनी गतिविधि के onCreate() तरीके में, Fused Location Provider Client का एक इंस्टेंस बनाएं, जैसा कि यहां दिए गए कोड स्निपेट में दिखाया गया है.

Kotlin

private lateinit var fusedLocationClient: FusedLocationProviderClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}

Java

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

डिवाइस की आखिरी लोकेशन की जानकारी पाना

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

आखिरी बार जगह की जानकारी का अनुरोध करने के लिए, getLastLocation() तरीके को कॉल करें. नीचे दिए गए कोड स्निपेट में, अनुरोध और जवाब को आसानी से मैनेज करने का तरीका बताया गया है:

Kotlin

fusedLocationClient.lastLocation
        .addOnSuccessListener { location : Location? ->
            // Got last known location. In some rare situations this can be null.
        }

Java

fusedLocationClient.getLastLocation()
        .addOnSuccessListener(this, new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                // Got last known location. In some rare situations this can be null.
                if (location != null) {
                    // Logic to handle location object
                }
            }
        });

getLastLocation() वाला तरीका, Task ऑब्जेक्ट दिखाता है. इसका इस्तेमाल करके, किसी जगह के अक्षांश और देशांतर के निर्देशांक वाला Location ऑब्जेक्ट पाया जा सकता है. लोकेशन ऑब्जेक्ट इन स्थितियों में null हो सकता है:

  • डिवाइस की सेटिंग में, जगह की जानकारी ऐक्सेस करने की सुविधा बंद है. अगर जगह की जानकारी की सुविधा बंद करने से पहले, आखिरी जगह की जानकारी हासिल की गई थी, तब भी नतीजा null हो सकता है. ऐसा इसलिए, क्योंकि जगह की जानकारी की सुविधा बंद करने पर कैश मेमोरी भी मिट जाती है.
  • डिवाइस ने कभी भी अपनी जगह की जानकारी रिकॉर्ड नहीं की है. ऐसा किसी नए डिवाइस या ऐसे डिवाइस के साथ हो सकता है जिसे फ़ैक्ट्री सेटिंग पर वापस लाया गया हो.
  • डिवाइस पर Google Play services रीस्टार्ट हो गई है. साथ ही, ऐसा कोई ऐसा क्लाइंट मौजूद नहीं है जिसने सेवाओं के रीस्टार्ट होने के बाद, जगह की जानकारी देने वाला ऐसा कोई भी क्लाइंट चालू किया हो जिसने जगह की जानकारी का अनुरोध किया हो. इस स्थिति से बचने के लिए, नया क्लाइंट बनाएं और जगह की जानकारी अपडेट करने का अनुरोध खुद करें. ज़्यादा जानकारी के लिए, जगह की जानकारी के अपडेट पाना लेख पढ़ें.

जगह का सबसे सटीक अनुमान चुनना

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

  • getLastLocation() इससे जगह की जानकारी का अनुमान तेज़ी से मिलता है. साथ ही, आपके ऐप्लिकेशन के लिए बैटरी खर्च कम होता है. हालांकि, अगर किसी दूसरे क्लाइंट ने हाल ही में जगह की जानकारी का इस्तेमाल नहीं किया है, तो हो सकता है कि जगह की जानकारी पुरानी हो.
  • getCurrentLocation() इससे डिवाइस को लगातार ताज़ा और ज़्यादा सटीक जगह मिलती है. हालांकि, इस तरीके से डिवाइस की जगह की जानकारी का हिसाब लगाने की प्रक्रिया चालू हो सकती है

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

अन्य संसाधन

Android डिवाइस पर मौजूदा जगह की जानकारी पाने के बारे में ज़्यादा जानने के लिए, ये लेख पढ़ें:

सैंपल

  • मौजूदा जगह की जानकारी फ़ेच करते समय, सबसे सही तरीके दिखाने के लिए सैंपल ऐप्लिकेशन.