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

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

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

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

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

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

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

ตรวจสอบว่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์เป็นไปตามข้อกำหนดของ ARCore SDK ตามที่อธิบายไว้ในคู่มือเริ่มใช้งานฉบับย่อสำหรับ Java

เปิดใช้ ARCore API

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

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

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

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

ในไฟล์ build.gradle ของแอป ให้ตั้งค่าบริการ Google Play ให้รวมไลบรารีตำแหน่งของบริการ Google 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 แอปพลิเคชันได้รับอนุญาตให้รับข้อมูลทางภูมิศาสตร์จากระบบการจัดตำแหน่งภาพ (VPS)

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

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

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

อุปกรณ์บางรุ่นที่รองรับ ARCore ไม่ได้รองรับ Geospatial API ตามที่อธิบายไว้ในquickstartสำหรับ 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 รายการ

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

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

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

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

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