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