API Không gian địa lý sử dụng kết hợp VPS và dữ liệu GPS để tạo ra tư thế Không gian địa lý có độ chính xác cao. Bạn có thể sử dụng API này ở bất kỳ nơi nào mà thiết bị có thể xác định vị trí của thiết bị:
- Ở những khu vực có độ chính xác GPS thấp, chẳng hạn như không gian trong nhà và môi trường đô thị đông đúc, API sẽ dựa vào phạm vi phủ sóng VPS để tạo ra các tư thế có độ chính xác cao.
- Trong môi trường ngoài trời có ít hoặc không có vật cản phía trên, API không gian địa lý có thể sử dụng dữ liệu vị trí GPS hiện có để tạo tư thế không gian địa lý với độ chính xác cao.
Bạn có thể xác định khả năng sử dụng VPS ở một vị trí ngang nhất định trước khi phiên AR bắt đầu và sử dụng thông tin này để tạo trải nghiệm cụ thể hơn, chẳng hạn như chỉ hiển thị nút "Enter AR" (Bắt đầu AR) khi có VPS.
Bật API ARCore
Ứng dụng của bạn phải bật ARCore API để kiểm tra khả năng sử dụng của VPS.
Sau khi bật ARCore API, bạn có thể kiểm tra khả năng sử dụng của VPS mà không cần:
- Hiện đang chạy
Session
(trước khi gọiSession.resume()
). - Thiết lập một
GeospatialMode
.
Kiểm tra khả năng sử dụng máy chủ ảo (VS) trong ứng dụng của bạn
Bạn có thể sử dụng API không gian địa lý ở bất kỳ nơi nào mà thiết bị có thể xác định vị trí của thiết bị. Nếu trải nghiệm thực tế tăng cường của bạn phụ thuộc vào phạm vi của VPS, thì bạn có thể sử dụng Session.checkVpsAvailabilityAsync()
để lấy VpsAvailabilityFuture
. Đây là một tác vụ không đồng bộ giúp kiểm tra khả năng sử dụng của VPS ở một vị trí ngang nhất định.
Sau khi có VpsAvailabilityFuture
, bạn có thể lấy kết quả của lệnh gọi đó bằng cách thăm dò ý kiến hoặc thông qua lệnh gọi lại.
Thăm dò kết quả
Sử dụng Future.getState()
để lấy trạng thái của Future
. Có 3 trạng thái:
PENDING
: Thao tác chưa hoàn tất nên chưa có kết quả.CANCELLED
:Future.cancel()
đã huỷ thao tác. Mọi lệnh gọi lại đã đăng ký sẽ không bao giờ được gọi.DONE
: Thao tác đã hoàn tất. Sử dụngVpsAvailabilityFuture.getResult()
để nhận kết quả.
Bạn có thể tiếp tục kiểm tra Future.getState()
cho đến khi nhiệm vụ này hoàn tất.
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, ...") } } }
Nhận kết quả thông qua lệnh gọi lại
Bạn cũng có thể lấy kết quả của Future
thông qua lệnh gọi lại. Sử dụng Session.checkVpsAvailabilityAsync()
và cung cấp callback
. callback
này sẽ được gọi trên Luồng chính ngay sau khi Future
có trạng thái 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) }
Huỷ Future
Sử dụng Future.cancel()
để huỷ Future
. Do tình trạng song song của luồng, có thể yêu cầu huỷ của bạn không thực sự thành công.
Future.cancel()
trả về true
nếu thử nghiệm này thành công và false
nếu không.
Sử dụng API không gian địa lý mà không cần có phạm vi cung cấp dịch vụ VPS
Bạn cũng có thể sử dụng API không gian địa lý ở những khu vực không có phạm vi phủ sóng của VPS. Trong môi trường ngoài trời có ít hoặc không có vật cản trên đầu, GPS có thể đủ để tạo tư thế với độ chính xác cao.
Các bước tiếp theo
- Nhận tư thế không gian địa lý của máy ảnh thiết bị để xác định vị trí chính xác của thiết bị của người dùng trong thế giới thực.