ตําแหน่งคร่าวๆ ใน Android Automotive OS

เพื่อเคารพความเป็นส่วนตัวของผู้ใช้ เราขอแนะนำให้นักพัฒนาแอปขอสิทธิ์เข้าถึงตำแหน่งแบบคร่าวๆ เท่านั้น แอปที่ต้องการตำแหน่งคร่าวๆ โดยประมาณมักจะใช้ตำแหน่งเครือข่ายที่ผสานรวม (FLP) เนื่องจากรวดเร็วและใช้พลังงานน้อยกว่า เมื่อเทียบกับอุปกรณ์เคลื่อนที่ที่ใช้ Android แล้ว ตำแหน่งเครือข่ายในแอปยานยนต์ อาจมีความท้าทายมากกว่า คุณใช้ Android API ได้ 2 รายการ ได้แก่

  • API ของ LocationManager กำหนดให้คุณใช้ requestLocationUpdates เพื่อ ระบุผู้ให้บริการตำแหน่งที่ต้องการอย่างชัดเจน

  • API ของบริการ Google Play มีวิธีที่ตรงไปตรงมายิ่งขึ้นในการ ทำงานกับตำแหน่งใน FusedLocationProviderClient

แอปยานยนต์จำนวนมากใช้ FLP จาก Google Play services API แทน LocationManager FLP จะเลือกผู้ให้บริการตำแหน่งที่เหมาะสมที่สุดตามเกณฑ์และนโยบายคำขอตำแหน่ง (กำลังและความแม่นยำ) ที่ยานพาหนะต้องการ

คุณสามารถเลือกที่จะขอและใช้ NETWORK_PROVIDER รวมถึง GPS_PROVIDER สำหรับ ตำแหน่งที่แน่นอนแทนได้ ซึ่งจะใช้สิทธิ์ android.permission.ACCESS_FINE_LOCATION ใน Android 12 (API ระดับ 31) ขึ้นไป FUSED_PROVIDER ซึ่งก่อนหน้านี้เข้าถึงได้ผ่าน API ของบริการ Google Play เท่านั้น จะพร้อมใช้งานเป็นผู้ให้บริการตำแหน่งแก่ LocationManager คุณดูการติดตั้งใช้งาน FLP ได้ใน FusedLocationProvider.java

แม้ว่าคุณจะใช้ GPS_PROVIDER โดยมีสิทธิ์เข้าถึงแบบหยาบเท่านั้นได้ แต่เฟรมเวิร์กจะลดความแม่นยำลงโดยไม่จำเป็นเพื่อให้สอดคล้องกับความคาดหวัง ซึ่งไม่สมเหตุสมผลสำหรับนักพัฒนาแอปที่กำหนดเป้าหมายไปยังโทรศัพท์ Android เนื่องจากความพร้อมใช้งานโดยรวมไม่ดีและมักจะใช้เวลานานกว่าในการรับตำแหน่งแบบหยาบ

ตำแหน่งเครือข่ายในยานยนต์

NETWORK_PROVIDER ที่ใช้ในโทรศัพท์ Android (ที่มีบริการ Google Mobile) จะระบุตำแหน่งโดยอิงตามเสาสัญญาณมือถือ จุดเข้าใช้งาน Wi-Fi และบีคอนบลูทูธ (BT) ที่อยู่ใกล้เคียง ดังนั้น NETWORK_PROVIDER อาจต้องใช้การเชื่อมต่อข้อมูล

สำหรับแอปยานยนต์ ข้อจำกัดของอุปกรณ์จะแตกต่างกัน เนื่องจากระบบดาวเทียมนำทางทั่วโลก (GNSS) มักจะเปิดอยู่ จึงไม่มีการลงโทษเนื่องจากมีการใช้พลังงานและแบตเตอรี่เพิ่มขึ้น ด้วยเหตุนี้ เวลาทำงานของ IVI จึงไม่ได้รับผลกระทบ เราพยายามลดข้อมูลที่แลกเปลี่ยนกับเซิร์ฟเวอร์ของเรา

ดังนั้น แอปจำนวนมากจึงใช้ FLP จาก Play API แทนการใช้โดยตรง เนื่องจาก FLP จะทำสิ่งที่ชาญฉลาดโดยอัตโนมัติด้วยการใช้ผู้ให้บริการตำแหน่งที่ตอบสนองเกณฑ์/นโยบายคำขอตำแหน่งได้ดีที่สุด (ได้แก่ พลังงานและความแม่นยำ)LocationManager

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

ผู้ให้บริการตำแหน่งเครือข่าย (NLP)

ยานพาหนะส่วนใหญ่ไม่ได้ใช้ Telephony API ที่จำเป็นเพื่อรับข้อมูลที่จำเป็น เกี่ยวกับรหัสเซลล์ (และระดับสัญญาณ) ด้วยเหตุนี้และเนื่องจากเราลดการใช้ข้อมูล จึงไม่มีการใช้งานฟังก์ชันเพิ่มเติมของ NLP

ผู้ให้บริการ Fused Location

FLP บนอุปกรณ์เคลื่อนที่ใช้ผู้ให้บริการเครือข่ายและ GPS อย่างชาญฉลาดตามความเหมาะสม นอกเหนือจากนี้ยังรวมข้อมูลจากเซ็นเซอร์อื่นๆ เพื่อเพิ่มคุณภาพของตำแหน่งให้ดียิ่งขึ้น ในทางกลับกัน การใช้งาน FLP ของ Automotive ในปัจจุบันใช้ประโยชน์จากสมมติฐานที่กล่าวถึงข้างต้นและใช้ GPS_PROVIDER เป็นแหล่งข้อมูลพื้นฐานตลอดเวลา โดยจะปรับตำแหน่ง จาก GNSS และเพิ่มข้อผิดพลาดบางอย่างเพื่อให้ไม่แม่นยำมากขึ้นเมื่อจำเป็น เช่น เมื่อมีการระบุตำแหน่งแบบหยาบให้แก่ไคลเอ็นต์

ดังนั้นในบางกรณี การรอให้ตำแหน่งแรกพร้อมใช้งานอาจนานกว่าปกติ เช่น ครั้งแรกที่ใช้ยานพาหนะหรือระบบย่อยตำแหน่ง (พูดให้เจาะจงยิ่งขึ้น) หรือหลังจากที่ยานพาหนะถูกลาก

ออกแบบแอปให้กำหนดเป้าหมายการใช้งานบนอุปกรณ์เคลื่อนที่และยานยนต์

สำหรับแอปที่กำหนดเป้าหมายอุปกรณ์เคลื่อนที่และยานยนต์ซึ่งไม่ ต้องใช้ความแม่นยำสูง ให้ขอandroid.permission.ACCESS_COARSE_LOCATION เท่านั้น และกลับไปใช้ FLP เมื่อพร้อมใช้งาน หรือจะใช้ GPS_PROVIDER โดยตรงด้วยสิทธิ์เดียวกันก็ได้ เฟรมเวิร์กจะลดความแม่นยำของตำแหน่ง GNSS พื้นฐานเพื่อให้สอดคล้องกับความคาดหวังของ API ดูข้อมูลเพิ่มเติมได้ที่ความแม่นยำ ในขอสิทธิ์เข้าถึงตำแหน่ง

นอกจากนี้ แอปเหล่านี้ต้องประกาศฟีเจอร์ android.hardware.location.network อย่างชัดเจนว่าเป็นฟีเจอร์ที่ไม่บังคับใน Manifest เช่น

<uses-feature android:name="android.hardware.location.network" android:required="false" />

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