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

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

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

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

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

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

फ़्यूज़्ड लोकेशन प्रोवाइडर को ऐक्सेस करने के लिए, आपके ऐप्लिकेशन के डेवलपमेंट प्रोजेक्ट में Google Play services शामिल होनी चाहिए. एसडीके मैनेजर की मदद से, 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);
}

डिवाइस की वह आखिरी जगह पता करना जिसके बारे में जानकारी है

Location Services क्लाइंट बनाने के बाद, किसी उपयोगकर्ता के डिवाइस की आखिरी बार पता चली जगह की जानकारी पाई जा सकती है. जब आपका ऐप्लिकेशन इनसे कनेक्ट हो जाता है, तब डिवाइस की जगह की जानकारी पाने के लिए, फ़्यूज़्ड लोकेशन प्रोवाइडर के 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 में मौजूदा जगह की जानकारी पाने के बारे में ज़्यादा जानने के लिए, यहां दिया गया कॉन्टेंट देखें:

सैंपल

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