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

जगह की जानकारी का सही इस्तेमाल, आपकी साइट या ऐप्लिकेशन के उपयोगकर्ताओं के लिए फ़ायदेमंद हो सकता है है. उदाहरण के लिए, अगर आपका ऐप्लिकेशन पैदल चलते समय लोगों को अपना रास्ता ढूंढने में मदद करता है या ट्रैक कर रहा है या अगर आपका ऐप्लिकेशन, ऐसेट की लोकेशन को ट्रैक करता है, तो उसे नियमित अंतराल पर डिवाइस की जगह की जानकारी. जगह की जानकारी (अक्षांश और देशांतर) के साथ-साथ, उपयोगकर्ता को और भी जानकारी दी जा सकती है. जैसे, डिवाइस की दिशा (यात्रा की हॉरिज़ॉन्टल दिशा), ऊंचाई या वेग. इस तरह की जानकारी और अन्य जानकारी Location अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ऑब्जेक्ट है जिसे आपका ऐप्लिकेशन फ़्यूज़्ड लोकेशन प्रोवाइडर. इसके जवाब में, एपीआई समय-समय पर आपके ऐप्लिकेशन को सबसे अच्छी जगह की जानकारी देता है. यह जानकारी, वाई-फ़ाई और जीपीएस (ग्लोबल पोज़िशनिंग सिस्टम) जैसी जगह की जानकारी देने वाली मौजूदा सेवाओं के आधार पर दी जाती है. जगह की जानकारी कितनी सटीक है, यह कई बातों पर निर्भर करता है. जैसे, जगह की जानकारी देने वाली सेवा देने वाली कंपनियां, जगह की जानकारी के लिए आपने जो अनुमतियां मांगी हैं, और जगह की जानकारी के अनुरोध में सेट किए गए विकल्प.

इस लेसन में, किसी डिवाइस के अपडेट पाने का अनुरोध करने का तरीका बताया गया है का इस्तेमाल कर रहा है requestLocationUpdates() तरीका है.

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

उपकरण का अंतिम ज्ञात स्थान एक आसान आधार प्रदान करता है जिससे शुरू करने से पहले, यह पक्का करें कि ऐप्लिकेशन की जगह की जानकारी पहले से मौजूद है समय-समय पर स्थान अपडेट. इस लेसन का डेटा अनजान जगह के बारे में पता लगाने से आपको पता चलता है कि कॉल करके अपनी आखिरी जगह की जानकारी कैसे पता करूँ getLastLocation(). नीचे दिए गए सेक्शन के स्निपेट यह मानते हैं कि आपके ऐप्लिकेशन में पहले से ही ने अंतिम ज्ञात स्थान को पुनर्प्राप्त कर लिया है और उसे ग्लोबल वैरिएबल में Location ऑब्जेक्ट mCurrentLocation.

जगह की जानकारी का अनुरोध करना

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

अनुरोध के फ़ॉर्म के आधार पर, फ़्यूज़ की गई जगह की जानकारी देने वाली सेवा देने वाली कंपनी, LocationCallback.onLocationResult() कॉलबैक तरीके को शुरू करती है और उसे Location ऑब्जेक्ट की सूची देती है. इसके अलावा, वह ऐसा भी कर सकती है कि वह PendingIntent को जारी करे, जिसमें एक्सटेंड किए गए डेटा में जगह की जानकारी शामिल हो. कॉन्टेंट रेटिंग की सटीक जानकारी और फ़्रीक्वेंसी अपडेट आपके अनुरोध किए गए स्थान की अनुमतियों से प्रभावित होते हैं और आपके पास सही विकल्प हैं.

इस लेसन में, LocationCallback कॉलबैक वाले तरीके का इस्तेमाल करके अपडेट पाने का तरीका बताया गया है. requestLocationUpdates() को कॉल करें. इसके लिए, LocationRequest ऑब्जेक्ट का अपना इंस्टेंस और LocationCallback पास करें. इस कोड सैंपल में दिखाए गए तरीके के मुताबिक, startLocationUpdates() तरीका तय करें:

Kotlin

override fun onResume() {
    super.onResume()
    if (requestingLocationUpdates) startLocationUpdates()
}

private fun startLocationUpdates() {
    fusedLocationClient.requestLocationUpdates(locationRequest,
            locationCallback,
            Looper.getMainLooper())
}

Java

@Override
protected void onResume() {
    super.onResume();
    if (requestingLocationUpdates) {
        startLocationUpdates();
    }
}

private void startLocationUpdates() {
    fusedLocationClient.requestLocationUpdates(locationRequest,
            locationCallback,
            Looper.getMainLooper());
}

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

जगह की जानकारी के अपडेट का कॉलबैक तय करें

कई तरह से जांची गई सही जगह की जानकारी देने वाला, LocationCallback.onLocationResult() कॉलबैक का तरीका. इनकमिंग आर्ग्युमेंट में एक सूची Location ऑब्जेक्ट होता है, जिसमें जगह का अक्षांश और देशांतर होता है. नीचे दिए गए स्निपेट में, LocationCallback इंटरफ़ेस को लागू करने और तरीका तय करने का तरीका बताया गया है. साथ ही, इसमें जगह की जानकारी अपडेट होने का टाइमस्टैंप पाने और अपने ऐप्लिकेशन के यूज़र इंटरफ़ेस पर अक्षांश, देशांतर, और टाइमस्टैंप दिखाने का तरीका भी बताया गया है:

Kotlin

private lateinit var locationCallback: LocationCallback

// ...

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

    locationCallback = object : LocationCallback() {
        override fun onLocationResult(locationResult: LocationResult?) {
            locationResult ?: return
            for (location in locationResult.locations){
                // Update UI with location data
                // ...
            }
        }
    }
}

Java

private LocationCallback locationCallback;

// ...

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

    locationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult == null) {
                return;
            }
            for (Location location : locationResult.getLocations()) {
                // Update UI with location data
                // ...
            }
        }
    };
}

जगह की जानकारी के अपडेट रोकना

विचार करें कि क्या आप स्थान अपडेट रोकना चाहते हैं जब गतिविधि जिनका फ़ोकस किसी और ऐप्लिकेशन पर नहीं रहता, जैसे कि जब उपयोगकर्ता किसी दूसरे ऐप्लिकेशन या किसी गतिविधि को अलग-अलग तरह से कैसे किया जा सकता है. इससे बैटरी कम खर्च हो सकती है इस्तेमाल किया जा रहा हो, बशर्ते ऐप्लिकेशन को जानकारी इकट्ठा करने की ज़रूरत न हो, भले ही बैकग्राउंड में चल रहा है. इस सेक्शन में बताया गया है कि गतिविधि के अपडेट onPause() तरीका.

जगह की जानकारी के अपडेट रोकने के लिए, कॉल करें removeLocationUpdates(), पास कर दो LocationCallback जैसा कि नीचे दिए गए कोड सैंपल में दिखाया गया है:

Kotlin

override fun onPause() {
    super.onPause()
    stopLocationUpdates()
}

private fun stopLocationUpdates() {
    fusedLocationClient.removeLocationUpdates(locationCallback)
}

Java

@Override
protected void onPause() {
    super.onPause();
    stopLocationUpdates();
}

private void stopLocationUpdates() {
    fusedLocationClient.removeLocationUpdates(locationCallback);
}

ट्रैक करने के लिए, बूलियन यानी requestingLocationUpdates का इस्तेमाल करें क्या स्थान अपडेट वर्तमान में चालू हैं. गतिविधि के onResume() तरीका, सही का निशान लगाएं और देखें कि क्या स्थान अपडेट वर्तमान में सक्रिय हैं और उन्हें सक्रिय करें, अगर नहीं:

Kotlin

override fun onResume() {
    super.onResume()
    if (requestingLocationUpdates) startLocationUpdates()
}

Java

@Override
protected void onResume() {
    super.onResume();
    if (requestingLocationUpdates) {
        startLocationUpdates();
    }
}

गतिविधि की स्थिति को सेव करें

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

नीचे दिया गया कोड सैंपल, गतिविधि की onSaveInstanceState() इंस्टेंस की स्थिति को सेव करने के लिए कॉलबैक करें:

Kotlin

override fun onSaveInstanceState(outState: Bundle?) {
    outState?.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, requestingLocationUpdates)
    super.onSaveInstanceState(outState)
}

Java

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putBoolean(REQUESTING_LOCATION_UPDATES_KEY,
            requestingLocationUpdates);
    // ...
    super.onSaveInstanceState(outState);
}

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

Kotlin

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

private fun updateValuesFromBundle(savedInstanceState: Bundle?) {
    savedInstanceState ?: return

    // Update the value of requestingLocationUpdates from the Bundle.
    if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) {
        requestingLocationUpdates = savedInstanceState.getBoolean(
                REQUESTING_LOCATION_UPDATES_KEY)
    }

    // ...

    // Update UI to match restored state
    updateUI()
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    updateValuesFromBundle(savedInstanceState);
}

private void updateValuesFromBundle(Bundle savedInstanceState) {
    if (savedInstanceState == null) {
        return;
    }

    // Update the value of requestingLocationUpdates from the Bundle.
    if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) {
        requestingLocationUpdates = savedInstanceState.getBoolean(
                REQUESTING_LOCATION_UPDATES_KEY);
    }

    // ...

    // Update UI to match restored state
    updateUI();
}

इंस्टेंस की स्थिति सेव करने के बारे में ज़्यादा जानने के लिए, Android गतिविधि क्लास का रेफ़रंस देखें.

ध्यान दें: उपयोगकर्ता की प्राथमिकताओं को ज़्यादा समय तक सेव रखने के लिए, आपके पास अपने ऐप्लिकेशन के SharedPreferences में उन्हें सेव करने का विकल्प है. अपनी गतिविधि के onPause() तरीके में, शेयर की गई सेटिंग सेट करें और onResume() में सेटिंग को वापस पाएं. प्राथमिकताएं सेव करने के बारे में ज़्यादा जानने के लिए, पढ़ें सेव किया जा रहा है मुख्य वैल्यू के सेट.

अन्य संसाधन

ज़्यादा जानने के लिए, इन संसाधनों का इस्तेमाल करें:

सैंपल