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

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

इस लेसन में, किसी डिवाइस के अपडेट पाने का अनुरोध करने का तरीका बताया गया है का इस्तेमाल कर रहा है 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() में अपनी पसंद वापस पाएं. प्राथमिकताएं सेव करने के बारे में ज़्यादा जानने के लिए, पढ़ें सेव किया जा रहा है मुख्य वैल्यू के सेट.

अन्य संसाधन

ज़्यादा जानकारी के लिए, यहां दिए गए संसाधनों का फ़ायदा लें:

सैंपल