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