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 dowolnym miejscu, w którym urządzenie może określić swoją lokalizację:
- W obszarach o niskiej dokładności GPS, takich jak wnętrza budynków i gęste obszary miejskie, interfejs API będzie korzystać z zasięgu VPS, aby generować pozy o wysokiej dokładności.
- W środowiskach zewnętrznych z niewielką liczbą przeszkód nad głową interfejs Geospatial API może używać dostępnych danych o lokalizacji GPS, aby generować pozy geoprzestrzenne z dużą dokładnością.
Przed rozpoczęciem sesji AR możesz określić dostępność VPS w danej pozycji poziomej i wykorzystać ją do tworzenia bardziej szczegółowych funkcji, np. wyświetlania przycisku „Wejdź do AR” tylko wtedy, gdy VPS jest dostępny.
Włącz interfejs ARCore API
Aby sprawdzić dostępność VPS, aplikacja musi mieć włączony interfejs ARCore API.
Po włączeniu interfejsu ARCore API możesz sprawdzić dostępność VPS bez:
- Obecnie uruchomiona funkcja
Session
(przed wywołaniemSession.resume()
). - Ustawiam
GeospatialMode
.
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 korzystanie z AR zależy od zasięgu VPS, możesz użyć Session.checkVpsAvailabilityAsync()
, aby uzyskać VpsAvailabilityFuture
, czyli zadanie asynchroniczne, które sprawdza dostępność VPS w danej pozycji poziomej.
Gdy masz VpsAvailabilityFuture
, możesz uzyskać jego wynik za pomocą metody pollingu lub wywołania zwrotnego.
Wyniki ankiety
Aby uzyskać stan Future
, użyj polecenia Future.getState()
. Istnieją 3 różne stany:
PENDING
: operacja nie została jeszcze ukończona, więc nie ma jeszcze żadnych wyników.CANCELLED
: operacja została anulowana przez użytkownikaFuture.cancel()
. Nie będzie też wykonywane żadne połączenie zwrotne.DONE
: operacja została zakończona. Aby uzyskać wynik, użyj argumentuVpsAvailabilityFuture.getResult()
.
Możesz nadal sprawdzać Future.getState()
, aż zadanie 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, ...") } } }
Uzyskiwanie wyniku za pomocą wywołania zwrotnego
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, na których nie ma pokrycia 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?
- Uzyskaj informacje o pozycji geograficznej z kamery urządzenia, aby określić dokładną lokalizację urządzenia użytkownika w świecie rzeczywistym.