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