Geospatial API menggunakan kombinasi VPS dan data GPS untuk menghasilkan pose Geospasial akurasi tinggi. API ini dapat digunakan di mana pun perangkat dapat menentukan lokasinya:
- Di area dengan akurasi GPS rendah, seperti dalam ruangan dan lingkungan perkotaan yang padat, API ini akan bergantung pada cakupan VPS untuk menghasilkan pose dengan akurasi tinggi.
- Di lingkungan luar ruangan dengan sedikit atau tanpa penghalang di atas, Geospatial API mungkin dapat menggunakan data lokasi GPS yang tersedia untuk membuat pose Geospasial dengan akurasi tinggi.
Anda dapat menentukan ketersediaan VPS pada posisi horizontal tertentu sebelum sesi AR dimulai dan menggunakannya untuk membuat pengalaman yang lebih spesifik — misalnya, untuk menampilkan tombol "Enter AR" hanya jika VPS tersedia.
Mengaktifkan ARCore API
Aplikasi Anda harus mengaktifkan ARCore API untuk memeriksa ketersediaan VPS.
Setelah ARCore API diaktifkan, Anda dapat memeriksa ketersediaan VPS tanpa:
Session
yang sedang berjalan (sebelum memanggilSession.resume()
).- Menetapkan
GeospatialMode
.
Memeriksa ketersediaan VPS di aplikasi Anda
Geospatial API dapat digunakan di mana pun perangkat dapat menentukan lokasinya. Jika pengalaman AR Anda bergantung pada cakupan VPS, Anda dapat menggunakan Session.checkVpsAvailabilityAsync()
untuk mendapatkan VpsAvailabilityFuture
, tugas asinkron yang memeriksa ketersediaan VPS pada posisi horizontal tertentu.
Setelah memiliki VpsAvailabilityFuture
, Anda dapat memperoleh hasilnya dengan polling atau melalui callback.
Mengambil polling hasil
Gunakan Future.getState()
untuk mendapatkan status Future
. Ada tiga status yang berbeda:
PENDING
: Operasi belum selesai, sehingga tidak ada hasil yang diketahui.CANCELLED
: Operasi telah dibatalkan olehFuture.cancel()
. Callback yang terdaftar tidak akan pernah dipanggil.DONE
: Operasi selesai. GunakanVpsAvailabilityFuture.getResult()
untuk mendapatkan hasilnya.
Anda dapat terus memeriksa Future.getState()
hingga tugas selesai.
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, ...") } } }
Mendapatkan hasil melalui callback
Anda juga bisa mendapatkan hasil Future
melalui callback. Gunakan Session.checkVpsAvailabilityAsync()
dan berikan callback
. callback
ini akan segera dipanggil di Thread utama setelah Future
memiliki status 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) }
Batalkan Future
Gunakan Future.cancel()
untuk mencoba membatalkan Future
. Karena paralelisme thread, ada kemungkinan bahwa upaya pembatalan Anda sebenarnya tidak berhasil.
Future.cancel()
menampilkan true
jika upaya ini berhasil, dan false
jika tidak.
Menggunakan Geospatial API tanpa cakupan VPS
Geospatial API juga dapat digunakan di area yang tidak memiliki cakupan VPS. Di lingkungan luar ruangan dengan sedikit atau tanpa penghalang di atas kepala, GPS mungkin cukup untuk membuat pose dengan akurasi tinggi.
Langkah berikutnya
- Dapatkan pose Geospasial kamera perangkat untuk menentukan lokasi persis perangkat pengguna di dunia nyata.