เราขอแนะนำให้นักพัฒนาแอปขอสิทธิ์เข้าถึงตำแหน่งแบบหยาบเท่านั้นเพื่อเคารพความเป็นส่วนตัวของผู้ใช้ แอปที่ต้องการตำแหน่งคร่าวๆ โดยประมาณมักจะใช้ตำแหน่งเครือข่ายที่ผสานรวม (FLP) เนื่องจากรวดเร็วและใช้พลังงานน้อยกว่า เมื่อเทียบกับอุปกรณ์เคลื่อนที่ที่ใช้ Android แล้ว ตำแหน่งเครือข่ายในแอปยานยนต์ อาจมีความท้าทายมากกว่า คุณใช้ Android API ได้ 2 รายการ ได้แก่
LocationManager API กำหนดให้คุณใช้
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 แทนการใช้ LocationManager โดยตรง
เนื่องจาก FLP จะเลือกผู้ให้บริการตำแหน่งที่ดีที่สุดโดยอัตโนมัติเพื่อให้เป็นไปตามเกณฑ์หรือนโยบายของคำขอ เช่น พลังงานและความแม่นยำ
ยานพาหนะมักจะไม่กระโดดจากที่หนึ่งไปยังอีกที่หนึ่ง ซึ่งแตกต่างจากอุปกรณ์เคลื่อนที่ โดยปกติแล้ว ระบบจะทราบตำแหน่งของยานพาหนะ
ผู้ให้บริการตำแหน่งเครือข่าย (NLP)
ยานพาหนะส่วนใหญ่ไม่ได้ใช้ Telephony API ที่จำเป็นเพื่อรับข้อมูลที่ต้องการ ใน Cell ID (และระดับสัญญาณ) ด้วยเหตุนี้และเนื่องจากเราลดการใช้ข้อมูล จึงไม่มีการใช้งานฟังก์ชันเพิ่มเติมของ NLP
ผู้ให้บริการ Fused Location
FLP บนอุปกรณ์เคลื่อนที่จะรวมข้อมูลจากเซ็นเซอร์อื่นๆ เพื่อเพิ่มคุณภาพของตำแหน่ง นอกเหนือจากการใช้ผู้ให้บริการเครือข่ายและ GPS ในทางกลับกัน FLP ยานยนต์ใช้ 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" />
แนวทางนี้ช่วยให้มีความเข้ากันได้มากขึ้นกับอุปกรณ์ในรูปแบบต่างๆ และทำให้แอปพร้อมใช้งานสูงสุดโดยไม่มีความแตกต่างของโค้ดสำหรับการ รับตำแหน่งเมื่อจำเป็น