ตรวจสอบความพร้อมใช้งานของ 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 คุณสามารถใช้ Session.checkVpsAvailabilityAsync() เพื่อรับ VpsAvailabilityFuture ซึ่งเป็นงานที่ทำงานแบบไม่พร้อมกันซึ่งจะตรวจสอบความพร้อมใช้งานของ VPS ในตำแหน่งแนวนอนที่ระบุ เมื่อได้รับ VpsAvailabilityFuture แล้ว คุณจะดูผลลัพธ์ได้โดยการปลุกหรือผ่านคอลแบ็ก

โพลผล

ใช้ Future.getState() เพื่อดูสถานะของ Future โดยจะมีสถานะต่างๆ 3 สถานะ ดังนี้

  • PENDING: การดำเนินการยังไม่เสร็จสมบูรณ์ จึงไม่ทราบผลลัพธ์
  • CANCELLED: Future.cancel() ยกเลิกการดำเนินการแล้ว ระบบจะไม่โทรกลับหาหมายเลขใดก็ตามที่ลงทะเบียนไว้
  • DONE: การดำเนินการเสร็จสมบูรณ์ ใช้ VpsAvailabilityFuture.getResult() เพื่อดูผลลัพธ์

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

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, ...")
    }
  }
}

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

นอกจากนี้ คุณยังรับผลลัพธ์ของ Future ผ่านการติดต่อกลับได้ด้วย ใช้ Session.checkVpsAvailabilityAsync() และระบุ callback ระบบจะเรียกใช้ callback นี้ในเทรดหลักทันทีหลังจาก Future มีสถานะ 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)
}

ยกเลิก Future

ใช้ Future.cancel() เพื่อพยายามยกเลิก Future เนื่องจากชุดข้อความมีเนื้อหาพร้อมกัน จึงอาจเป็นไปได้ที่ความพยายามในการยกเลิกของคุณไม่สำเร็จ Future.cancel() จะแสดงผล true หากความพยายามนี้สำเร็จ และ false ในกรณีอื่นๆ

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

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

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