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

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

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

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

ARCore API चालू करें

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

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

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

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

पोल का नतीजा

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

  • AR_FUTURE_STATE_PENDING: कार्रवाई अभी पूरी नहीं हुई है, इसलिए कोई नतीजा नहीं मिला है.
  • AR_FUTURE_STATE_CANCELLED: ArFuture_cancel() ने कार्रवाई रद्द कर दी है. रजिस्टर किए गए किसी भी कॉलबैक पर कभी कॉल नहीं किया जाएगा.
  • AR_FUTURE_STATE_DONE: कार्रवाई पूरी हो गई है. नतीजा पाने के लिए ArVpsAvailabilityFuture_getResult() का इस्तेमाल करें.

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

// Obtain a ArVpsAvailabilityFuture and store it somewhere.
ArVpsAvailabilityFuture* future = NULL;
CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude,
                                          NULL, NULL, &future) == AR_SUCCESS);

// Poll ArVpsAvailabilityFuture later, for example, in a render loop.
ArFutureState future_state = AR_FUTURE_STATE_PENDING;
ArFuture_getState(ar_session, (ArFuture*)future, &future_state);
if (future_state == AR_FUTURE_STATE_DONE) {
  ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN;
  ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability);
  switch (vps_availability) {
    case AR_VPS_AVAILABILITY_AVAILABLE:
      // VPS is available at this location.
      break;
    case AR_VPS_AVAILABILITY_UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection
      // error.
      break;

      // Handle other error states, e.g.
      // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED,
      // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ...
  }
  ArFuture_release((ArFuture*)future);
}

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

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

void vps_availability_callback(void* context, ArVpsAvailability availability) {
  // Callback is called on the Main thread.

  // Handle the ArVpsAvailability result as shown above.
  // For example, show UI that enables your AR view.

  // It is a best practice to free `context` memory at the end of the callback.
  free(context);
}

void check_availability_with_callback(ArSession* ar_session, double latitude,
                                      double longitude) {
  ArVpsAvailabilityFuture* future = NULL;
  void* context = NULL;
  CHECK(ArSession_checkVpsAvailabilityAsync(
      ar_session, latitude, longitude, context, vps_availability_callback,
      &future) == AR_SUCCESS);
}

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

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

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

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

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