Kiểm tra khả năng sử dụng VPS tại vị trí hiện tại của thiết bị

API Không gian địa lý sử dụng kết hợp VPS và dữ liệu GPS để tạo ra các 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 cứ nơi nào thiết bị có thể xác định vị trí của mình:

  • Trong các khu vực có độ chính xác thấp của GPS, 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 trên cao, API Không gian địa lý có thể sử dụng dữ liệu vị trí GPS có sẵn để tạo ra các tư thế Không gian địa lý với độ chính xác cao.

Bạn có thể xác định tính sẵn có của VPS tại một vị trí ngang nhất định trước khi phiên AR bắt đầu và sử dụng nó để tạo trải nghiệm cụ thể hơn — ví dụ: để hiển thị nút "Enter AR" chỉ khi VPS có sẵn.

Bật API ARCore

Ứng dụng của bạn phải bật API ARCore để kiểm tra tính sẵn có của VPS.

Sau khi bật API ARCore, bạn có thể kiểm tra tính sẵn có của VPS mà không cần:

Kiểm tra tính sẵn có của VPS trong ứng dụng của bạn

API Không gian địa lý có thể được dùng ở bất kỳ nơi nào thiết bị có thể xác định vị trí của mình. Nếu trải nghiệm AR phụ thuộc vào mức độ sử dụng VPS, bạn có thể sử dụng ArSession_checkVpsAvailabilityAsync() để lấy ArVpsAvailabilityFuture. Đây là một tác vụ không đồng bộ kiểm tra tính sẵn có của VPS tại một vị trí ngang nhất định. Sau khi có ArVpsAvailabilityFuture, bạn có thể nhận kết quả của lớp này bằng cách thăm dò ý kiến hoặc thông qua một 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:

Bạn có thể tiếp tục kiểm tra ArFuture_getState() cho đến khi việc cần làm 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ể nhận 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 năng song song của chuỗi, 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à trả về 0 nếu không thành công.

Sử dụng API Không gian địa lý mà không cần áp dụng VPS

API Không gian địa lý cũng có thể được dùng trong những khu vực không có VPS. Trong môi trường ngoài trời có ít hoặc không có vật cản trên cao, GPS có thể đủ để tạo tư thế với độ chính xác cao.

Các bước tiếp theo