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

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

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

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

เปิดใช้ ARCore API

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

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

ตรวจสอบความพร้อมใช้งาน VPS ในแอป

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

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

ใช้ 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);
}

รับผลลัพธ์ผ่าน Callback

นอกจากนี้ คุณยังรับผลลัพธ์ของ 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 อาจเพียงพอที่จะสร้างท่าทางที่มีความแม่นยำสูง

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