जगह की जानकारी की सेटिंग बदलना

अगर आपके ऐप्लिकेशन को जगह की जानकारी का अनुरोध करना है या अनुमति से जुड़े अपडेट पाने हैं, तो डिवाइस पर जीपीएस या वाई-फ़ाई स्कैनिंग जैसी सही सिस्टम सेटिंग चालू होनी चाहिए. डिवाइस के जीपीएस जैसी सेवाओं को सीधे चालू करने के बजाय, आपका ऐप्लिकेशन सटीक जानकारी/बिजली की खपत के लिए ज़रूरी लेवल और अपडेट के लिए ज़रूरी इंटरवल तय करता है. इसके बाद, डिवाइस अपने-आप सिस्टम की सेटिंग में ज़रूरी बदलाव करता है. इन सेटिंग को LocationRequest डेटा ऑब्जेक्ट से तय किया जाता है.

इस लेसन में, सेटिंग क्लाइंट का इस्तेमाल करके, यह पता लगाने का तरीका बताया गया है कि कौनसी सेटिंग चालू हैं. साथ ही, उपयोगकर्ता को एक टैप से अपनी सेटिंग अपडेट करने के लिए, जगह की जानकारी की सेटिंग वाला डायलॉग दिखाने का तरीका भी बताया गया है.

जगह की जानकारी की सुविधाएं कॉन्फ़िगर करना

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

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

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

फ़्यूज़ की गई जगह की जानकारी देने वाली सेवा को अनुरोध करने के लिए पैरामीटर सेव करने के लिए, एक LocationRequest बनाएं. पैरामीटर से यह तय होता है कि जगह की जानकारी के अनुरोधों के लिए, जगह की जानकारी कितनी सटीक होनी चाहिए. जगह की जानकारी के अनुरोध के सभी उपलब्ध विकल्पों के बारे में जानकारी पाने के लिए, LocationRequest क्लास का रेफ़रंस देखें. इस लेसन में, अपडेट इंटरवल, सबसे तेज़ अपडेट इंटरवल, और प्राथमिकता सेट की जाती है. इनके बारे में यहां बताया गया है:

अपडेट का इंटरवल
setInterval() - इस तरीके से, मिलीसेकंड में वह दर सेट की जाती है जिस पर आपका ऐप्लिकेशन, जगह की जानकारी के अपडेट पाना चाहता है. ध्यान दें कि बैटरी खर्च को ऑप्टिमाइज़ करने के लिए, जगह की जानकारी के अपडेट इस दर से थोड़े तेज़ या धीमे हो सकते हैं. इसके अलावा, हो सकता है कि कोई अपडेट न हो. उदाहरण के लिए, अगर डिवाइस में कोई कनेक्टिविटी नहीं है.
सबसे तेज़ अपडेट इंटरवल
setFastestInterval() - यह तरीका, मिलीसेकंड में सबसे तेज़ दर सेट करता है. इस दर पर, आपका ऐप्लिकेशन जगह की जानकारी के अपडेट को मैनेज कर सकता है. अगर आपके ऐप्लिकेशन को setInterval() में बताए गए रेट से ज़्यादा तेज़ी से अपडेट मिलने का फ़ायदा नहीं मिलता है, तो आपको इस तरीके को कॉल करने की ज़रूरत नहीं है.
प्राथमिकता

setPriority() - यह तरीका, अनुरोध की प्राथमिकता सेट करता है. इससे Google Play services की जगह की जानकारी वाली सेवाओं को यह पता चलता है कि जगह की जानकारी के लिए किन सोर्स का इस्तेमाल करना है. ये वैल्यू इस्तेमाल की जा सकती हैं:

  • PRIORITY_BALANCED_POWER_ACCURACY - इस सेटिंग का इस्तेमाल करके, शहर के किसी ब्लॉक में अपनी जगह की सटीक जानकारी का अनुरोध करें. यह जानकारी करीब 100 मीटर तक सटीक होती है. इसे सटीक जानकारी का कम लेवल माना जाता है. साथ ही, इससे कम बैटरी खर्च होती है. इस सेटिंग के चालू होने पर, जगह की जानकारी की सेवाएं वाई-फ़ाई और सेल टावर की पोज़िशनिंग का इस्तेमाल कर सकती हैं. हालांकि, ध्यान दें कि जगह की जानकारी देने वाली सेवा देने वाली कंपनी चुनने का फ़ैसला कई अन्य बातों पर निर्भर करता है. जैसे, कौनसे सोर्स उपलब्ध हैं.
  • PRIORITY_HIGH_ACCURACY - जगह की सबसे सटीक जानकारी का अनुरोध करने के लिए, इस सेटिंग का इस्तेमाल करें. इस सेटिंग के चालू होने पर, जगह की जानकारी की सेवाएं, जगह की जानकारी का पता लगाने के लिए जीपीएस का इस्तेमाल कर सकती हैं.
  • PRIORITY_LOW_POWER - शहर के लेवल पर सटीक जानकारी का अनुरोध करने के लिए, इस सेटिंग का इस्तेमाल करें. इससे, आपको शहर के आस-पास के 10 किलोमीटर के इलाके की जानकारी मिलती है. इसे सटीक जानकारी का कम लेवल माना जाता है. साथ ही, इसकी बैटरी खपत कम होती है.
  • PRIORITY_NO_POWER - अगर आपको डिवाइस की बैटरी खपत पर कम से कम असर डालना है, लेकिन जगह की जानकारी के अपडेट चाहिए, तो इस सेटिंग का इस्तेमाल करें. इस सेटिंग के साथ, आपका ऐप्लिकेशन जगह की जानकारी के अपडेट को ट्रिगर नहीं करता. हालांकि, उसे अन्य ऐप्लिकेशन से ट्रिगर की गई जगह की जानकारी मिलती है.

जगह की जानकारी का अनुरोध बनाएं और इस कोड सैंपल में दिखाए गए पैरामीटर सेट करें:

Kotlin

fun createLocationRequest() {
  val locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build()
}

Java

protected void createLocationRequest() {
  LocationRequest locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build();
}

PRIORITY_HIGH_ACCURACY की प्राथमिकता, ACCESS_FINE_LOCATION की अनुमति सेटिंग के साथ मिलकर, ऐप्लिकेशन मेनिफ़ेस्ट में तय की गई और 5,000 मिलीसेकंड (5 सेकंड) के तेज़ अपडेट इंटरवल की वजह से, फ़्यूज़ की गई जगह की जानकारी देने वाली सेवा, जगह की जानकारी के ऐसे अपडेट दिखाती है जो कुछ फ़ीट के अंदर सटीक होते हैं. यह तरीका, मैपिंग ऐप्लिकेशन के लिए सही है, जो जगह की जानकारी रीयल टाइम में दिखाते हैं.

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

जगह की जानकारी की मौजूदा सेटिंग पाना

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

Kotlin

val builder = LocationSettingsRequest.Builder()
        .addLocationRequest(locationRequest)

Java

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
     .addLocationRequest(locationRequest);

इसके बाद, देखें कि जगह की जानकारी की मौजूदा सेटिंग सही हैं या नहीं:

Kotlin

val builder = LocationSettingsRequest.Builder()

// ...

val client: SettingsClient = LocationServices.getSettingsClient(this)
val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())

Java

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();

// ...

SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

Task पूरा होने के बाद, आपका ऐप्लिकेशन LocationSettingsResponse ऑब्जेक्ट के स्टेटस कोड को देखकर, जगह की जानकारी की सेटिंग देख सकता है. जगह की जानकारी की काम की सेटिंग की मौजूदा स्थिति के बारे में ज़्यादा जानकारी पाने के लिए, आपका ऐप्लिकेशन LocationSettingsResponse ऑब्जेक्ट के getLocationSettingsStates() तरीके को कॉल कर सकता है.

उपयोगकर्ता से जगह की जानकारी की सेटिंग बदलने के लिए कहना

यह तय करने के लिए कि जगह की जानकारी के अनुरोध के लिए जगह की जानकारी की सेटिंग सही हैं या नहीं, Task ऑब्जेक्ट में OnFailureListener जोड़ें. यह ऑब्जेक्ट, जगह की जानकारी की सेटिंग की पुष्टि करता है. इसके बाद, देखें कि onFailure() तरीके में पास किया गया Exception ऑब्जेक्ट, ResolvableApiException क्लास का इंस्टेंस है या नहीं. इससे पता चलता है कि सेटिंग में बदलाव करना ज़रूरी है. इसके बाद, startResolutionForResult() को कॉल करके, उपयोगकर्ता को जगह की जानकारी की सेटिंग में बदलाव करने की अनुमति देने के लिए कहने वाला डायलॉग दिखाएं.

नीचे दिए गए कोड स्निपेट में यह पता लगाने का तरीका बताया गया है कि उपयोगकर्ता की जगह की जानकारी से जुड़ी सेटिंग, जगह की जानकारी की सेवाओं को LocationRequest बनाने की अनुमति देती हैं या नहीं. साथ ही, इसमें यह भी बताया गया है कि ज़रूरत पड़ने पर, उपयोगकर्ता से जगह की जानकारी की सेटिंग बदलने की अनुमति कैसे मांगी जाए:

Kotlin

task.addOnSuccessListener { locationSettingsResponse ->
    // All location settings are satisfied. The client can initialize
    // location requests here.
    // ...
}

task.addOnFailureListener { exception ->
    if (exception is ResolvableApiException){
        // Location settings are not satisfied, but this can be fixed
        // by showing the user a dialog.
        try {
            // Show the dialog by calling startResolutionForResult(),
            // and check the result in onActivityResult().
            exception.startResolutionForResult(this@MainActivity,
                    REQUEST_CHECK_SETTINGS)
        } catch (sendEx: IntentSender.SendIntentException) {
            // Ignore the error.
        }
    }
}

Java

task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
    @Override
    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        // All location settings are satisfied. The client can initialize
        // location requests here.
        // ...
    }
});

task.addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        if (e instanceof ResolvableApiException) {
            // Location settings are not satisfied, but this can be fixed
            // by showing the user a dialog.
            try {
                // Show the dialog by calling startResolutionForResult(),
                // and check the result in onActivityResult().
                ResolvableApiException resolvable = (ResolvableApiException) e;
                resolvable.startResolutionForResult(MainActivity.this,
                        REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
                // Ignore the error.
            }
        }
    }
});

अगले लेसन, जगह की जानकारी के अपडेट पाना में, आपको समय-समय पर जगह की जानकारी के अपडेट पाने का तरीका बताया गया है.