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

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

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

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

ARCore API चालू करना

आपके ऐप्लिकेशन में ARCore API चालू करना ज़रूरी है, ताकि यह देखा जा सके कि VPS की सुविधा उपलब्ध है या नहीं.

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

अपने ऐप्लिकेशन में VPS की उपलब्धता देखना

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

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

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