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

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

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

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

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

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

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

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

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

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

अपनी ऐक्टिविटी के onCreate() तरीके में, कई तरह से जांची गई सही जगह की जानकारी देने वाला एपीआई क्लाइंट का एक इंस्टेंस बनाएं. यह कोड स्निपेट में दिखाया गया है.

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 में मौजूदा जगह की जानकारी पाने के बारे में ज़्यादा जानने के लिए, यहां दिया गया कॉन्टेंट देखें:

सैंपल