API không gian địa lý sử dụng kết hợp dữ liệu VPS và GPS để tạo các tư thế không gian địa lý có độ chính xác cao. API này có thể được sử dụng ở bất kỳ nơi nào mà thiết bị có thể xác định vị trí của nó:
- Ở 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 của 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 máy chủ ảo (VS) tại một vị trí ngang nhất định trước khi phiên thực tế tăng cường bắt đầu và sử dụng mô-đun này để tạo trải nghiệm cụ thể hơn – ví dụ: để trình bày một giao diện "Chuyển sang môi trường thực tế tăng cường" chỉ khi có sẵn dịch vụ ảo VPN.
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:
ArSession
đang chạy (trước khi gọiArSession_resume()
).- Thiết lập một
ArGeospatialMode
.
Kiểm tra xem VPS có được cung cấp trong ứng dụng của bạn hay không
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 nó. Nếu trải nghiệm AR của bạn phụ thuộc vào phạm vi phủ sóng của VPS, bạn có thể sử dụng ArSession_checkVpsAvailabilityAsync()
để lấy ArVpsAvailabilityFuture
, một tác vụ không đồng bộ kiểm tra khả năng sử dụng VPS ở một vị trí ngang nhất định.
Sau khi có ArVpsAvailabilityFuture
, 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 ArFuture_getState()
để lấy trạng thái của ArFuture
. Có 3 trạng thái:
AR_FUTURE_STATE_PENDING
: Thao tác chưa hoàn tất nên chưa xác định được kết quả.AR_FUTURE_STATE_CANCELLED
: Thao tác này đã bịArFuture_cancel()
huỷ. Mọi lệnh gọi lại đã đăng ký sẽ không bao giờ được gọi.AR_FUTURE_STATE_DONE
: Thao tác đã hoàn tất. Sử dụngArVpsAvailabilityFuture_getResult()
để nhận kết quả.
Bạn có thể tiếp tục kiểm tra ArFuture_getState()
cho đến khi nhiệm vụ này hoàn tất.
// Obtain a ArVpsAvailabilityFuture and store it somewhere. ArVpsAvailabilityFuture* future = NULL; CHECK(ArSession_checkVpsAvailabilityAsync(ar_session, latitude, longitude, NULL, NULL, &future) == AR_SUCCESS); // Poll ArVpsAvailabilityFuture later, for example, in a render loop. ArFutureState future_state = AR_FUTURE_STATE_PENDING; ArFuture_getState(ar_session, (ArFuture*)future, &future_state); if (future_state == AR_FUTURE_STATE_DONE) { ArVpsAvailability vps_availability = AR_VPS_AVAILABILITY_UNKNOWN; ArVpsAvailabilityFuture_getResult(ar_session, future, &vps_availability); switch (vps_availability) { case AR_VPS_AVAILABILITY_AVAILABLE: // VPS is available at this location. break; case AR_VPS_AVAILABILITY_UNAVAILABLE: // VPS is unavailable at this location. break; case AR_VPS_AVAILABILITY_ERROR_NETWORK_CONNECTION: // The external service could not be reached due to a network connection // error. break; // Handle other error states, e.g. // AR_VPS_AVAILABILITY_ERROR_RESOURCE_EXHAUSTED, // AR_VPS_AVAILABILITY_ERROR_INTERNAL, ... } ArFuture_release((ArFuture*)future); }
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 ArFuture
thông qua lệnh gọi lại. Sử dụng ArSession_checkVpsAvailabilityAsync()
và cung cấp callback
. callback
này sẽ được gọi trên luồng Chính ngay sau khi ArFuture
có trạng thái AR_FUTURE_STATE_DONE
.
void vps_availability_callback(void* context, ArVpsAvailability availability) { // Callback is called on the Main thread. // Handle the ArVpsAvailability result as shown above. // For example, show UI that enables your AR view. // It is a best practice to free `context` memory at the end of the callback. free(context); } void check_availability_with_callback(ArSession* ar_session, double latitude, double longitude) { ArVpsAvailabilityFuture* future = NULL; void* context = NULL; CHECK(ArSession_checkVpsAvailabilityAsync( ar_session, latitude, longitude, context, vps_availability_callback, &future) == AR_SUCCESS); }
Huỷ ArFuture
Sử dụng ArFuture_cancel()
để thử huỷ ArFuture
. 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.
ArFuture_cancel()
sẽ trả về 1
nếu lần thử này thành công và nếu không thì trả về 0
.
Sử dụng API Không gian địa lý mà không cần sử dụng 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 cung cấp 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.