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

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

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