Sprawdź dostępność VPS w bieżącej lokalizacji urządzenia

Geospatial API korzysta z kombinacji danych VPS i danych GPS do generowania wysokiej dokładności pozycji geoprzestrzennych. Interfejsu API można używać w każdym miejscu, w którym urządzenie może określić swoje położenie:

  • W obszarach o niskiej dokładności GPS, na przykład w pomieszczeniach wewnątrz i w gęsto zabudowanych środowiskach miejskich, interfejs API do generowania pozycji o wysokiej dokładności będzie wykorzystywać zasięg VPS.
  • W środowiskach zewnętrznych, w których jest niewiele przeszkód z powietrza lub nie ma ich wcale, interfejs Geospatial API może korzystać z dostępnych danych o lokalizacji GPS do generowania póz geoprzestrzennych z dużą dokładnością.

Możesz określić dostępność VPS w danej pozycji poziomej przed rozpoczęciem sesji AR i wykorzystać ją do tworzenia bardziej szczegółowych doświadczeń, na przykład do pokazania opcji „Enter AR” (Tryb AR). tylko wtedy, gdy dostępny jest VPS.

Włączanie interfejsu ARCore API

Aby sprawdzić dostępność VPS, musisz włączyć w aplikacji ARCore API.

Po włączeniu ARCore API możesz sprawdzać dostępność VPS bez:

Sprawdź dostępność VPS w swojej aplikacji

Interfejsu Geospatial API można używać w dowolnym miejscu, w którym urządzenie może określić swoje położenie. Jeśli działanie AR zależy od pokrycia VPS, możesz użyć narzędzia ArSession_checkVpsAvailabilityAsync(), aby uzyskać ArVpsAvailabilityFuture – asynchroniczne zadanie, które sprawdza dostępność VPS w danej pozycji poziomej. Gdy już masz ArVpsAvailabilityFuture, możesz uzyskać wynik przez ankietę lub wywołanie zwrotne.

Przeprowadź ankietę

Użyj ArFuture_getState(), by uzyskać stan ArFuture. Istnieją 3 różne stany:

Możesz sprawdzać pole ArFuture_getState(), dopóki zadanie nie zostanie ukończone.

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

Uzyskanie wyniku przez wywołanie zwrotne

Możesz też uzyskać wynik funkcji ArFuture, korzystając z wywołania zwrotnego. Użyj aplikacji ArSession_checkVpsAvailabilityAsync() i podaj callback. Ta funkcja callback zostanie wywołana w wątku głównym wkrótce po tym, jak funkcja ArFuture otrzyma stan AR_FUTURE_STATE_DONE.

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

Anuluj: ArFuture

Użyj adresu ArFuture_cancel(), aby anulować ArFuture. Z powodu równoległości wątków może się zdarzyć, że próba anulowania się nie powiedzie. Jeśli próba zakończyła się powodzeniem, funkcja ArFuture_cancel() zwraca wartość 1. W przeciwnym razie zwraca wartość 0.

Używaj interfejsu Geospatial API bez zasięgu VPS

Interfejsu Geospatial API można też używać na obszarach, które nie mają zasięgu VPS. Na zewnątrz, gdzie jest niewiele przeszkód z góry, lub bez przeszkód, do wygenerowania pozycji z dużą dokładnością wystarczy GPS.

Co dalej?