รับตำแหน่งคร่าวๆ

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

เมื่อเทียบกับอุปกรณ์เคลื่อนที่ที่ใช้ Android แล้ว ตำแหน่งเครือข่ายในแอปยานยนต์ อาจมีความท้าทายมากกว่า คุณใช้ Android API ได้ 2 รายการ ได้แก่

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

  • API ของบริการ Google Play มีวิธีที่ง่ายขึ้นในการทำงานกับตำแหน่งด้วยการเปิดตัว Fused Location Provider (FLP)

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

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

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

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

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

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

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

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

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

ยานพาหนะส่วนใหญ่ไม่ได้ใช้ 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" />

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