Geospatial API, yüksek doğrulukta Coğrafi duruşlar oluşturmak için VPS ve GPS verilerinin bir kombinasyonunu kullanır. API, cihazın konumunu belirleyebildiği her yerde kullanılabilir:
- Kapalı alanlar ve yoğun kentsel ortamlar gibi GPS doğruluğunun düşük olduğu yerlerde API, yüksek doğrulukta pozlar oluşturmak için VPS kapsamını kullanır.
- Baş üstü engellerin az olduğu veya hiç olmadığı dış mekan ortamlarında, Geospatial API yüksek doğrulukla Coğrafi duruşlar 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 kullanabilirsiniz (ör. yalnızca VPS kullanılabilirken "AR'ye gir" düğmesi göstermek için).
ARCore API'yi etkinleştirme
VPS'nin kullanılabilirliğini kontrol etmek için uygulamanızda ARCore API'nin etkinleştirilmesi gerekir.
ARCore API etkinleştirildikten sonra VPS'lerin kullanılabilirliğini aşağıdakiler olmadan kontrol edebilirsiniz:
- Şu anda çalışan bir
Session
(Session.resume()
çağrılmadan önce). GeospatialMode
ayarlanıyor.
Uygulamanızda VPS'nin kullanılabilirliğini kontrol etme
Coğrafi API, cihazın konumunu belirleyebildiği her yerde kullanılabilir. AR deneyiminiz VPS kapsamına bağlıysa belirli bir yatay konumda VPS kullanılabilirliğini kontrol eden bir eşzamansız görev olan VpsAvailabilityFuture
almak için Session.checkVpsAvailabilityAsync()
kullanabilirsiniz.
VpsAvailabilityFuture
edinildikten sonra anket veya geri arama yoluyla sonucu alabilirsiniz.
Sonuç anketi
Future
öğesinin durumunu almak için Future.getState()
kullanın. Üç farklı durum vardır:
PENDING
: İşlem henüz tamamlanmadığı için sonuç bilinmiyor.CANCELLED
: İşlemFuture.cancel()
tarafından iptal edildi. Kayıtlı geri arama numaraları hiçbir zaman aranmaz.DONE
: İşlem tamamlandı. Sonucu almak içinVpsAvailabilityFuture.getResult()
işlevini kullanın.
Görev tamamlanana kadar Future.getState()
simgesini kontrol etmeye devam edebilirsiniz.
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, ...") } } }
Geri çağırma ile sonucu alma
Future
sonucunu geri çağırma aracılığıyla da alabilirsiniz. Session.checkVpsAvailabilityAsync()
kullanın ve bir callback
sağlayın. Bu callback
, Future
DONE
durumuna sahip olduktan kısa bir süre sonra Ana iş parçacığında çağrılır.
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) }
Future
Future
aboneliğini iptal etmeyi denemek için Future.cancel()
öğesini kullanın. İptal denemeniz, iş parçacığı paralelliği nedeniyle aslında başarılı olmayabilir.
Future.cancel()
, bu deneme başarılı olduysa true
, aksi takdirde false
değerini döndürür.
Geospatial API'yi VPS kapsamı olmadan kullanma
Geospatial API, VPS kapsama alanı olmayan bölgelerde de kullanılabilir. Baş üstü engellerin az olduğu veya hiç olmadığı açık hava ortamlarında GPS, yüksek doğrulukta bir poz oluşturmak için yeterli olabilir.
Sırada ne var?
- Kullanıcının cihazının gerçek dünyadaki tam konumunu belirlemek için cihaz kamerasının coğrafi duruşunu alın.