หน้านี้อธิบายแนวทางปฏิบัติแนะนำสำหรับการขอและจัดการสิทธิ์การใช้ตำแหน่งในพื้นหลัง
ขอสิทธิ์เข้าถึงตำแหน่งแบบ "อนุญาตตลอด"
ตั้งแต่ Android 14 เป็นต้นไป แอปต้องมีสิทธิ์
ACCESS_BACKGROUND_LOCATION
เพื่อเข้าถึงตำแหน่งของผู้ใช้
Navigation SDK มีสิทธิ์นี้อยู่ในไฟล์ Manifest คุณจึงไม่
จำเป็นต้องขอสิทธิ์อย่างชัดแจ้ง (หากไม่จำเป็นสำหรับวัตถุประสงค์อื่นๆ) เนื่องจาก
เครื่องมือผสานไฟล์ Manifest ของ Gradle จะช่วยให้มั่นใจได้ว่าสิทธิ์นี้จะผสานเข้ากับไฟล์ Manifest ของแอป
อย่างไรก็ตาม การมีสิทธิ์ ACCESS_BACKGROUND_LOCATION
ไม่เพียงพอต่อการเข้าถึงตำแหน่งในเบื้องหลัง และเราขอแนะนำให้คุณขอสิทธิ์เข้าถึงตำแหน่ง "อนุญาตตลอดเวลา" จากผู้ใช้ การดำเนินการนี้จะช่วยให้แอปทำงานในเบื้องหลังและแสดงการแจ้งเตือนได้ ซึ่งจะช่วยเพิ่มความแม่นยำของตำแหน่งในระหว่างการนำทาง
พรอมต์ควรอธิบายให้ผู้ใช้ทราบว่าการให้สิทธิ์จะช่วยปรับปรุง ความแม่นยำของตำแหน่งและปรับปรุงประสบการณ์การนำทางเมื่อแอป ทำงานในเบื้องหลังได้อย่างไร
ดูข้อมูลเพิ่มเติมเกี่ยวกับการแจ้งให้ผู้ใช้ขอสิทธิ์เข้าถึงตำแหน่งได้ที่ขอสิทธิ์เข้าถึงตำแหน่ง | เซ็นเซอร์และตำแหน่ง | นักพัฒนาแอป Android ในเอกสารประกอบสำหรับนักพัฒนาแอป Android
ตรวจสอบว่าได้ล้างข้อมูลการแจ้งเตือนการนำทางอย่างถูกต้อง
เพื่อให้มั่นใจว่าแอปจะไม่แสดงการแจ้งเตือนต่อไปหลังจากที่ไม่มีความจำเป็นอีกต่อไป โปรดทำตามขั้นตอนการล้างข้อมูลต่อไปนี้
- หลังจากเรียกใช้
startGuidance()
แล้ว อย่าลืมเรียกใช้stopGuidance()
หรือclearDestination()
- หลังจากลงทะเบียน
ArrivalListener
แล้ว อย่าลืมยกเลิกการลงทะเบียน - หลังจากลงทะเบียน
RoadSnappedLocationProvider
แล้ว อย่าลืมยกเลิกการลงทะเบียน
การทำตามขั้นตอนเหล่านี้จะช่วยให้มั่นใจได้ว่าระบบจะไม่เก็บการแจ้งเตือนไว้เมื่อไม่จำเป็นต้องใช้แล้ว ซึ่งอาจทำให้แบตเตอรี่หมดและอาจเกิดการรั่วไหลของหน่วยความจำ
เมื่อเรียกใช้เมธอด NavigationApi#initForegroundServiceManager อีกครั้ง ให้เรียกใช้ NavigationApi#clearForegroundServiceManager ก่อน
หากแอปใช้ ForegroundServiceManager
ให้เรียกใช้
NavigationApi#clearForegroundServiceManager
ก่อนเรียกใช้
NavigationApi#initForegroundServiceManagerProvider
และหากคุณได้
เริ่มต้น ForegroundServiceManager
แล้ว ให้เรียกใช้
NavigationApi#initForegroundServiceManagerMessageAndIntent
คุณทำเช่นนี้ได้เพื่อ
อัปเดตรหัสการแจ้งเตือนหรือเนื้อหาการแจ้งเตือนหลังจาก
เริ่มต้นตัวจัดการบริการที่ทำงานอยู่เบื้องหน้าแล้ว
เกี่ยวกับข้อจำกัดใหม่ที่เปิดตัวใน Android 14
Android 14 (Android U) ได้เปิดตัว ข้อจำกัด ใหม่เกี่ยวกับการเข้าถึงตำแหน่งของผู้ใช้ในเบื้องหลังของแอป เราได้อัปเดต Navigation SDK ในเวอร์ชัน 5.4.0 เพื่อช่วยลดผลกระทบจากการเปลี่ยนแปลงเหล่านี้ และจัดการสิทธิ์เข้าถึงตำแหน่งในเบื้องหลังได้ดียิ่งขึ้น นอกจากนี้ เราขอแนะนำให้อัปเดตการ ติดตั้งใช้งานเพื่อให้แอปยังคงเข้าถึงข้อมูลตำแหน่งที่ แม่นยำที่สุดได้ต่อไป
การเปลี่ยนแปลงใน Android 14 ส่งผลต่อ Navigation SDK อย่างไร
เมื่อคุณเรียกใช้
startGuidance()
ในแอป บริการที่ทำงานอยู่เบื้องหน้าจะเริ่มแสดงการแจ้งเตือนผู้ใช้สำหรับการนำทางแบบเลี้ยวต่อเลี้ยว การนำทางแบบเลี้ยวต่อเลี้ยวขึ้นอยู่กับการเข้าถึงตำแหน่งของผู้ใช้เพื่ออัปเดตเส้นทางและแสดงคำแนะนำด้วยภาพและเสียงที่ถูกต้อง ตั้งแต่ Android 14 เป็นต้นไป การเข้าถึงตำแหน่งที่แน่นอนของผู้ใช้ในเบื้องหลังจะต้องได้รับสิทธิ์จากผู้ใช้ โดยค่าเริ่มต้น หาก
แอปไม่มีสิทธิ์ของผู้ใช้ในการเข้าถึงตำแหน่งในเบื้องหลังและ
พยายามเริ่มบริการที่ทำงานอยู่เบื้องหน้าสำหรับการอัปเดตตำแหน่ง ระบบจะแสดง SecurityException
ซึ่งทำให้แอปขัดข้อง
วิธีที่ Navigation SDK บรรเทาปัญหานี้
ตั้งแต่เวอร์ชัน 5.4.0 เป็นต้นไป Navigation SDK จะจัดการSecurityException
โดยไม่ส่งผลกระทบต่อแอป ทำให้การนำทางทำงานในเบื้องหลังต่อไปได้
นอกจากนี้ Navigation SDK ยังมี
ACCESS_BACKGROUND_LOCATION
ใน AndroidManifest
ด้วย ด้วยวิธีนี้ แอปของคุณจึงไม่จำเป็นต้องประกาศสิทธิ์ด้วยตนเอง เนื่องจาก Gradle จะจัดการการผสาน
อย่างไรก็ตาม หากไม่มีการแสดงการแจ้งเตือนต่อผู้ใช้ก่อนที่แอปจะเข้าสู่เบื้องหลัง Navigation SDK จะอาศัยระบบในการอัปเดตตำแหน่ง การอัปเดตระบบเหล่านี้อาจไม่บ่อยนักหรือไม่แม่นยำ และส่งผล
ให้ประสบการณ์การนำทางต่ำกว่ามาตรฐาน ด้วยเหตุนี้ เราจึงขอแนะนำให้คุณ
แจ้งให้ผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งในเบื้องหลังด้วย
สิ่งที่นักพัฒนาแอปทำได้เพื่อปรับปรุงความแม่นยำของตำแหน่งสำหรับการนำทาง
คุณปรับปรุงความแม่นยำของสัญญาณตำแหน่งที่ใช้โดย Navigation SDK ได้โดยอัปเดตแอปเพื่อแจ้งให้ผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งในเบื้องหลัง ดูข้อมูลเพิ่มเติมได้ที่ขอสิทธิ์เข้าถึงตำแหน่งแบบ "อนุญาตตลอด"