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

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

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

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

ARCore API चालू करें

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

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

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

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

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

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