डिवाइस की मौजूदा जगह पर VPS की उपलब्धता देखें

Geospatial API, VPS और जीपीएस डेटा की मदद से, बहुत ज़्यादा सटीक जियोस्पेशियल पोज़ जनरेट करता है. एपीआई का इस्तेमाल ऐसी किसी भी जगह पर किया जा सकता है जहां डिवाइस अपनी जगह की जानकारी हासिल कर सके:

  • जीपीएस सटीक तरीके से काम न करने वाले इलाकों, जैसे कि इनडोर जगहों और घनी आबादी वाले शहरी माहौल में यह एपीआई, सटीक पोज़िशन जनरेट करने के लिए वीपीएस कवरेज पर निर्भर करता है.
  • अगर आस-पास की जगहों में बहुत कम या बिलकुल भी रुकावटें न हों, तो Geospatial API, जीपीएस से मिली जगह की जानकारी का डेटा इस्तेमाल कर सकता है. इससे, भौगोलिक स्थिति के हिसाब से सटीक अनुमान जनरेट किए जा सकते हैं.

एआर सेशन शुरू होने से पहले, आपके पास किसी खास हॉरिज़ॉन्टल पोज़िशन पर, वीपीएस की उपलब्धता तय करने का विकल्प होता है. इसके बाद, इसका इस्तेमाल किसी खास तरह का अनुभव देने के लिए भी किया जा सकता है. जैसे, "एआर (ऑगमेंटेड रिएलिटी) में प्रवेश करना" दिखाना बटन को सिर्फ़ तब दबाएं, जब VPS उपलब्ध हो.

ARCore API चालू करें

VPS की उपलब्धता देखने के लिए, आपके ऐप्लिकेशन में ARCore API चालू होना चाहिए.

ARCore API चालू होने के बाद, इन चीज़ों का इस्तेमाल किए बिना भी यह पता लगाया जा सकता है कि VPS की उपलब्धता क्या है:

  • Session.resume() को कॉल करने से पहले, मौजूदा वर्शन Session चल रहा है.
  • GeospatialMode को सेट किया जा रहा है.

यह देखना कि आपके ऐप्लिकेशन में वीपीएस की सुविधा उपलब्ध है या नहीं

Geospatial API का इस्तेमाल ऐसी किसी भी जगह पर किया जा सकता है जहां डिवाइस की जगह की जानकारी का पता लगाया जा सके. अगर आपका एआर अनुभव, वीपीएस कवरेज पर निर्भर करता है, तो Session.checkVpsAvailabilityAsync() का इस्तेमाल करके VpsAvailabilityFuture का इस्तेमाल किया जा सकता है. यह एक एसिंक्रोनस टास्क होता है, जो दिए गए हॉरिज़ॉन्टल पोज़िशन पर वीपीएस की उपलब्धता की जांच करता है. VpsAvailabilityFuture होने के बाद, पोल करके या कॉलबैक से, इसके नतीजे पाए जा सकते हैं.

पोल का नतीजा

Future की स्थिति जानने के लिए, Future.getState() का इस्तेमाल करें. ये तीन अलग-अलग स्थितियां होती हैं:

  • PENDING: कार्रवाई अभी पूरी नहीं हुई है, इसलिए कोई नतीजा नहीं मिला है.
  • CANCELLED: Future.cancel() ने कार्रवाई रद्द कर दी है. रजिस्टर किए गए किसी भी कॉलबैक पर कभी कॉल नहीं किया जाएगा.
  • DONE: कार्रवाई पूरी हो गई है. नतीजा पाने के लिए VpsAvailabilityFuture.getResult() का इस्तेमाल करें.

टास्क पूरा होने तक, Future.getState() को देखा जा सकता है.

Java

// Obtain a VpsAvailabilityFuture and store it somewhere.
VpsAvailabilityFuture future = session.checkVpsAvailabilityAsync(latitude, longitude, null);

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.getState() == FutureState.DONE) {
  switch (future.getResult()) {
    case AVAILABLE:
      // VPS is available at this location.
      break;
    case UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection error.
      break;

      // Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...
  }
}

Kotlin

// Obtain a VpsAvailabilityFuture and store it somewhere.
val future = session.checkVpsAvailabilityAsync(latitude, longitude, null)

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.state == FutureState.DONE) {
  when (future.result) {
    VpsAvailability.AVAILABLE -> {
      // VPS is available at this location.
    }
    VpsAvailability.UNAVAILABLE -> {
      // VPS is unavailable at this location.
    }
    VpsAvailability.ERROR_NETWORK_CONNECTION -> {
      // The external service could not be reached due to a network connection error.
    }
    else -> {
      TODO("Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...")
    }
  }
}

कॉलबैक की मदद से नतीजा पाना

Future का नतीजा, कॉलबैक के ज़रिए भी पाया जा सकता है. Session.checkVpsAvailabilityAsync() का इस्तेमाल करें और callback दें. जैसे ही Future की स्थिति DONE होगी, तुरंत ही इस callback को मुख्य थ्रेड पर कॉल किया जाएगा.

Java

session.checkVpsAvailabilityAsync(
    latitude,
    longitude,
    result -> {
      // Callback is called on the Main thread.
      switch (result) {
          // Handle the VpsAvailability result as shown above.
          // For example, show UI that enables your AR view.
      }
    });

Kotlin

session.checkVpsAvailabilityAsync(latitude, longitude) { result ->
  // Callback is called on the Main thread.

  // Handle the VpsAvailability result as shown above.
  // For example, show UI that enables your AR view.
  TODO("Handle VpsAvailability " + result)
}

Future के मैंडेट को रद्द करें

Future को रद्द करने की कोशिश करने के लिए, Future.cancel() का इस्तेमाल करें. थ्रेड एक साथ कई काम करने की वजह से, हो सकता है कि रद्द करने की आपकी कोशिश पूरी न हो पाए. अगर कोशिश पूरी होती है, तो Future.cancel() true दिखाएगा. अगर ऐसा नहीं है, तो false दिखाएगा.

VPS कवरेज के बिना Geospatial API का इस्तेमाल करना

Geospatial API का इस्तेमाल उन इलाकों में भी किया जा सकता है जहां वीपीएस कवरेज नहीं है. बाहर के वातावरण में बहुत कम या कोई रुकावट नहीं होने पर, जीपीएस को बहुत ज़्यादा सटीक पोज़ देने के लिए काफ़ी मदद मिल सकती है.

आगे क्या करना है