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