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