เปิดใช้ Geospatial API สำหรับแอป NDK ของ Android (C)

กำหนดการตั้งค่าของแอปเพื่อให้ใช้ Geospatial API ได้

ข้อกำหนดเบื้องต้น

ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกําหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ

หากคุณต้องการเรียกใช้แอปตัวอย่างที่แสดงฟังก์ชันการทำงานที่อธิบายไว้ คุณจะเห็น การเริ่มต้นใช้งาน ARCore Geospatial อย่างรวดเร็วสำหรับ Android สำหรับ Java แอปตัวอย่างใน Quickstart เขียนโดยใช้ Java ตัวอย่างโค้ด ในเอกสารนี้มีไว้เพื่อฟังก์ชันการทำงานเดียวกันกับที่เขียนด้วยภาษา C

โปรดดู ข้อมูลเบื้องต้นเกี่ยวกับ Geospatial API สำหรับข้อมูลเพิ่มเติม เกี่ยวกับ Geospatial API

หากคุณเพิ่งเริ่มพัฒนาโดยใช้ ARCore โปรดดูการเริ่มต้นใช้งาน สำหรับข้อมูลเกี่ยวกับข้อกำหนดของซอฟต์แวร์และฮาร์ดแวร์ คุณสมบัติเบื้องต้น และ ข้อมูลอื่นๆ ที่เกี่ยวข้องกับแพลตฟอร์มที่คุณใช้

โปรดตรวจสอบว่าสภาพแวดล้อมในการพัฒนาเป็นไปตามข้อกำหนดของ ARCore SDK ดัง ที่อธิบายไว้ใน Quickstart สำหรับ Java

เปิดใช้ ARCore API

ก่อนที่จะใช้ Visual Positioning System (VPS) ในแอปของคุณ ก่อนอื่น เปิดใช้ ARCore API ในโปรเจ็กต์ Google Cloud ใหม่หรือที่มีอยู่ บริการนี้มีหน้าที่ การโฮสต์ การจัดเก็บ และการแปล Anchor ภูมิสารสนเทศ

เราขอแนะนำให้ใช้การให้สิทธิ์แบบไม่ใช้คีย์ แต่ก็รองรับการให้สิทธิ์คีย์ API ด้วย

เพิ่มไลบรารีที่จำเป็นลงในแอป

หลังจากให้สิทธิ์แอปเรียกใช้ ARCore API แล้ว คุณต้องเพิ่มไลบรารีลงใน เปิดใช้ฟีเจอร์ภูมิสารสนเทศในแอป

ในไฟล์ build.gradle ของแอป ให้ตั้งค่าบริการ Google Play เพื่อรวม Play ไลบรารีสถานที่ของบริการ

dependencies {
  // Apps must declare play-services-location version >= 16.
  // In the following line, substitute `16 (or later)` with the latest version.
  implementation 'com.google.android.gms:play-services-location:16 (or later)'
}

เปิดใช้ความสามารถด้านภูมิสารสนเทศในการกำหนดค่าเซสชัน

ก่อนสร้างเซสชัน ให้เปลี่ยน GeospatialMode ในเซสชัน การกำหนดค่าเป็น ENABLED:

// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);

// Enable the Geospatial API.
ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Release config resources.
ArConfig_destroy(ar_config);

ขณะที่ตั้งค่าโหมดภูมิสารสนเทศเป็น ENABLED แอปพลิเคชันจะได้รับอนุญาตให้ ข้อมูลทางภูมิศาสตร์จาก Visual Positioning System (VPS)

แจ้งให้ผู้ใช้อนุญาตให้ใช้ข้อมูลของอุปกรณ์

แอปที่ใช้ ARCore Geospatial API จะต้องแสดงข้อความแจ้งแก่ผู้ใช้เพื่อ รับทราบและอนุญาตให้ใช้ข้อมูลจากอุปกรณ์ของตน โปรดดู ข้อกำหนดด้านความเป็นส่วนตัวของผู้ใช้เพิ่มเติม

ตรวจสอบความเข้ากันได้ของอุปกรณ์

อุปกรณ์บางรุ่นที่รองรับ ARCore จะรองรับ Geospatial API เท่านั้นเนื่องจาก ที่อธิบายไว้ในการเริ่มต้นอย่างรวดเร็ว สำหรับ Java

หากต้องการตรวจสอบความเข้ากันได้กับอุปกรณ์ของผู้ใช้ โปรดโทร ArSession_isGeospatialModeSupported() หากค่านี้ส่งคืนเป็น "เท็จ" อย่าพยายามกำหนดค่าเซสชัน (ด้านล่าง) ดังเช่น ดังนั้น ArStatus จะรายงาน AR_ERROR_UNSUPPORTED_CONFIGURATION

ขอสิทธิ์เข้าถึงตำแหน่งจากผู้ใช้ขณะรันไทม์

แอปของคุณต้องขอสิทธิ์เข้าถึงตำแหน่งขณะรันไทม์

หากต้องการใช้ ARCore Geospatial API แอปของคุณต้องลงทะเบียนสิ่งต่อไปนี้ การอนุญาตเพิ่มเติม:

  • ACCESS_FINE_LOCATION เพื่อระบุตำแหน่งของผู้ใช้ได้อย่างแม่นยำ

  • ACCESS_COARSE_LOCATION เพื่อระบุตำแหน่งของผู้ใช้อย่างไม่ถูกต้องและเพื่อปฏิบัติตาม ข้อกำหนดด้านความเป็นส่วนตัวของผู้ใช้ แต่ไม่สามารถกำหนดค่า Geospatial API ได้ ตำแหน่งคร่าวๆ ได้ และคำขอ API จะล้มเหลวเมื่อผู้ใช้มี ตั้งสิทธิ์นี้ โปรดดูข้อมูลเพิ่มเติมด้านล่าง

  • ACCESS_INTERNET เพื่อติดต่อบริการ ARCore Geospatial API

<manifest ... >
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.INTERNET" />
</manifest>

ในอุปกรณ์ที่ใช้ Android เวอร์ชัน 12 ขึ้นไป ผู้ใช้ขอ ที่แอปของคุณเข้าถึงได้เท่านั้น ตำแหน่งโดยประมาณ เพื่อรองรับคำขอนี้ แอปของคุณต้องมี ACCESS_COARSE_LOCATION กำหนดค่าสิทธิ์แล้วพร้อมกับ ACCESS_FINE_LOCATION, ดังที่แสดงด้านบน คุณต้อง กำหนดค่าสิทธิ์เข้าถึงตำแหน่งทั้ง 2 รายการ

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

ตรวจสอบความพร้อมให้บริการของภูมิสารสนเทศ ณ ตำแหน่งปัจจุบันของอุปกรณ์

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

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

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