Cihazın mevcut konumunda VPS kullanılabilirliğini kontrol edin

Geospatial API, yüksek doğruluklu Coğrafi pozlar oluşturmak için VPS ve GPS verilerinin bir kombinasyonunu kullanır. API, cihazın konumunu belirleyebildiği her yerde kullanılabilir:

  • API, kapalı alanlar ve yoğun kentsel ortamlar gibi GPS doğruluğunun düşük olduğu alanlarda yüksek isabetli pozlar oluşturmak için VPS'nin kapsamını kullanır.
  • Geospatial API, yukarıdan engellerin çok az olduğu veya hiç olmadığı dış ortamlarda, yüksek doğrulukla Coğrafi pozisyonlar oluşturmak için mevcut GPS konum verilerini kullanabilir.

AR oturumu başlamadan önce belirli bir yatay konumda VPS'nin kullanılabilirliğini belirleyebilir ve daha spesifik deneyimler oluşturmak için (örneğin, yalnızca VPS kullanılabilir olduğunda "AR'ye Gir" düğmesi sunmak için) kullanabilirsiniz.

ARCore API'yi etkinleştir

VPS'nin kullanılabilirliğini kontrol etmek için uygulamanız ARCore API'sini etkinleştirmelidir.

ARCore API etkinleştirildikten sonra, VPS kullanılabilirliğini aşağıdakileri olmadan kontrol edebilirsiniz:

Uygulamanızda VPS kullanılabilirliğini kontrol edin

Geospatial API, cihazın konumunu belirleyebildiği her yerde kullanılabilir. Artırılmış gerçeklik deneyiminiz VPS kapsamına dayanıyorsa ArSession_checkVpsAvailabilityAsync() aracını kullanarak bir ArVpsAvailabilityFuture elde edebilirsiniz. Bu, belirli bir yatay konumdaki VPS kullanılabilirliğini kontrol eden eşzamansız bir görevdir. ArVpsAvailabilityFuture oluşturduktan sonra anketin sonucunu yoklama veya geri çağırma yoluyla elde edebilirsiniz.

Sonucu anketle

ArFuture durumunu almak için ArFuture_getState() kodunu kullanın. Üç farklı durum vardır:

Görev tamamlanana kadar ArFuture_getState() simgesini kontrol etmeye devam edebilirsiniz.

// 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);
}

Geri arama yoluyla sonucu elde etme

ArFuture işleminin sonucunu geri çağırma yoluyla da alabilirsiniz. ArSession_checkVpsAvailabilityAsync() kullanın ve bir callback sağlayın. ArFuture öğesinin AR_FUTURE_STATE_DONE durumundan kısa bir süre sonra bu callback, ana iş parçacığında çağrılacak.

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 aboneliğini iptal et

ArFuture aboneliğini iptal etmeyi denemek için ArFuture_cancel() numarasını kullanın. İleti dizisi benzerliği nedeniyle, iptal girişiminizin gerçekten başarılı olmaması mümkündür. ArFuture_cancel(), bu deneme başarılıysa 1 değerini, aksi takdirde 0 değerini döndürür.

Geospatial API'yi VPS kapsamı olmadan kullanma

Geospatial API, VPS kapsamında olmayan bölgelerde de kullanılabilir. Yukarıdan engellerin çok az olduğu veya hiç olmadığı açık ortamlarda GPS, yüksek doğrulukta poz oluşturmak için yeterli olabilir.

Sırada ne var?