ตรวจสอบความพร้อมใช้งานของ VPS ที่ตำแหน่งปัจจุบันของอุปกรณ์

Geospatial API ใช้ข้อมูล VPS และ GPS ร่วมกันเพื่อสร้างตำแหน่งเชิงพื้นที่ที่มีความแม่นยำสูง API นี้ใช้ได้ในทุกที่ที่อุปกรณ์สามารถระบุตำแหน่งได้ ดังนี้

  • ในพื้นที่ที่มีความแม่นยำของ GPS ต่ำ เช่น พื้นที่ในอาคารและสภาพแวดล้อมในเมืองที่หนาแน่น API จะอาศัยความครอบคลุมของ VPS เพื่อสร้างท่าทางที่มีความแม่นยำสูง
  • ในสภาพแวดล้อมกลางแจ้งที่มีสิ่งกีดขวางเหนือศีรษะเพียงเล็กน้อยหรือไม่มีเลย Geospatial API อาจใช้ข้อมูลตำแหน่ง GPS ที่พร้อมใช้งานเพื่อสร้างตำแหน่งเชิงพื้นที่ที่มีความแม่นยำสูงได้

คุณสามารถระบุความพร้อมใช้งานของ VPS ในตำแหน่งแนวนอนที่ระบุได้ก่อนที่เซสชัน AR จะเริ่มขึ้น และใช้ข้อมูลดังกล่าวเพื่อสร้างประสบการณ์ที่เฉพาะเจาะจงมากขึ้น เช่น เพื่อแสดงปุ่ม "เข้าสู่ AR" เฉพาะเมื่อ VPS พร้อมใช้งานเท่านั้น

เปิดใช้ ARCore API

แอปของคุณต้องเปิดใช้ ARCore API เพื่อตรวจสอบความพร้อมใช้งานของ VPS

เมื่อเปิดใช้ ARCore API แล้ว คุณจะตรวจสอบความพร้อมใช้งานของ VPS ได้โดยไม่ต้องทำดังนี้

ตรวจสอบความพร้อมให้บริการของ VPS ในแอป

Geospatial API สามารถใช้ได้ทุกที่ที่อุปกรณ์ระบุตำแหน่งได้ หากประสบการณ์ AR ของคุณขึ้นอยู่กับความครอบคลุมของ VPS คุณสามารถใช้ ArSession_checkVpsAvailabilityAsync() เพื่อรับ ArVpsAvailabilityFuture ซึ่งเป็นงานที่ทำงานแบบไม่พร้อมกันซึ่งจะตรวจสอบความพร้อมใช้งานของ VPS ในตำแหน่งแนวนอนที่ระบุ เมื่อได้รับ ArVpsAvailabilityFuture แล้ว คุณจะดูผลลัพธ์ได้โดยการปลุกหรือผ่านคอลแบ็ก

สำรวจผลลัพธ์

ใช้ ArFuture_getState() เพื่อดูสถานะของ ArFuture โดยสถานะมี 3 สถานะดังนี้

  • AR_FUTURE_STATE_PENDING: การดำเนินการยังไม่เสร็จสมบูรณ์ จึงไม่ทราบผลลัพธ์
  • AR_FUTURE_STATE_CANCELLED: ArFuture_cancel() ยกเลิกการดำเนินการแล้ว ระบบจะไม่โทรกลับหาหมายเลขใดก็ตามที่ลงทะเบียนไว้
  • AR_FUTURE_STATE_DONE: การดำเนินการเสร็จสมบูรณ์ ใช้ ArVpsAvailabilityFuture_getResult() เพื่อดูผลลัพธ์

คุณสามารถตรวจสอบ ArFuture_getState() ต่อไปได้จนกว่างานจะเสร็จสมบูรณ์

// 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);
}

รับผลลัพธ์ผ่านการติดต่อกลับ

นอกจากนี้ คุณยังดูผลลัพธ์ของ ArFuture ผ่านคอลแบ็กได้ด้วย ใช้ ArSession_checkVpsAvailabilityAsync() แล้วป้อน callback ระบบจะเรียกใช้ callback นี้ในเธรดหลักไม่นานหลังจากที่ ArFuture มีสถานะเป็น 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);
}

ยกเลิก ArFuture

ใช้ ArFuture_cancel() เพื่อพยายามยกเลิก ArFuture เนื่องจากการขนานของชุดข้อความ คุณจึงอาจยกเลิกไม่สำเร็จ ArFuture_cancel() จะแสดงผล 1 หากการพยายามนี้สำเร็จ และเป็น 0 ในกรณีอื่นๆ

ใช้ Geospatial API ที่ไม่มีความครอบคลุมของ VPS

นอกจากนี้ คุณยังใช้ Geospatial API ในพื้นที่ที่ไม่มี VPS ครอบคลุมได้ด้วย ในสภาพแวดล้อมกลางแจ้งที่มีสิ่งกีดขวางเหนือศีรษะเพียงเล็กน้อยหรือไม่มีเลย GPS อาจเพียงพอที่จะสร้างท่าทางที่มีความแม่นยำสูง

ขั้นตอนถัดไป