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 Session.checkVpsAvailabilityAsync(), aby uzyskać VpsAvailabilityFuture – asynchroniczne zadanie, które sprawdza dostępność VPS w danej pozycji poziomej. Gdy już masz VpsAvailabilityFuture, możesz uzyskać wynik przez ankietę lub wywołanie zwrotne.

Przeprowadź ankietę

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

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

Java

// Obtain a VpsAvailabilityFuture and store it somewhere.
VpsAvailabilityFuture future = session.checkVpsAvailabilityAsync(latitude, longitude, null);

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.getState() == FutureState.DONE) {
  switch (future.getResult()) {
    case AVAILABLE:
      // VPS is available at this location.
      break;
    case UNAVAILABLE:
      // VPS is unavailable at this location.
      break;
    case ERROR_NETWORK_CONNECTION:
      // The external service could not be reached due to a network connection error.
      break;

      // Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...
  }
}

Kotlin

// Obtain a VpsAvailabilityFuture and store it somewhere.
val future = session.checkVpsAvailabilityAsync(latitude, longitude, null)

// Poll VpsAvailabilityFuture later, for example, in a render loop.
if (future.state == FutureState.DONE) {
  when (future.result) {
    VpsAvailability.AVAILABLE -> {
      // VPS is available at this location.
    }
    VpsAvailability.UNAVAILABLE -> {
      // VPS is unavailable at this location.
    }
    VpsAvailability.ERROR_NETWORK_CONNECTION -> {
      // The external service could not be reached due to a network connection error.
    }
    else -> {
      TODO("Handle other error states, e.g. ERROR_RESOURCE_EXHAUSTED, ERROR_INTERNAL, ...")
    }
  }
}

Uzyskanie wyniku przez wywołanie zwrotne

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

Java

session.checkVpsAvailabilityAsync(
    latitude,
    longitude,
    result -> {
      // Callback is called on the Main thread.
      switch (result) {
          // Handle the VpsAvailability result as shown above.
          // For example, show UI that enables your AR view.
      }
    });

Kotlin

session.checkVpsAvailabilityAsync(latitude, longitude) { result ->
  // Callback is called on the Main thread.

  // Handle the VpsAvailability result as shown above.
  // For example, show UI that enables your AR view.
  TODO("Handle VpsAvailability " + result)
}

Anuluj: Future

Użyj adresu Future.cancel(), aby anulować Future. 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 Future.cancel() zwraca wartość true. W przeciwnym razie zwraca wartość false.

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?