背景位置資訊使用最佳做法

本頁面說明要求及管理背景位置資訊使用權限的最佳做法。

要求「一律允許」位置存取權

自 Android 14 起,應用程式必須具備 ACCESS_BACKGROUND_LOCATION 權限,才能存取使用者的位置資訊。Navigation SDK 的資訊清單檔案中已包含這項權限,因此您不需要明確要求這項權限 (如果不是為了其他用途),因為 Gradle 資訊清單合併工具會確保這項權限與應用程式的資訊清單合併。

不過,光有 ACCESS_BACKGROUND_LOCATION 權限還不夠,您還需要要求使用者授予「一律允許」位置資訊存取權,才能在背景存取位置資訊。這可確保應用程式能在背景執行並顯示通知,在導航時盡可能提供準確的位置資訊。

提示應向使用者說明,授予權限後,應用程式在背景執行時,可提高定位準確度並改善導覽體驗。

範例權限對話方塊

如要進一步瞭解如何提示使用者授予位置存取權,請參閱 Android 開發人員文件中的「要求位置存取權 | 感應器和位置資訊 | Android 開發人員」。

確保導航通知已正確清除

為確保應用程式不會在不再需要通知時,仍讓通知保持有效,請務必執行下列清除步驟:

  • 叫用 startGuidance() 後,請務必叫用 stopGuidance()clearDestination()
  • 註冊 ArrivalListener 後,請務必取消註冊。
  • 註冊 RoadSnappedLocationProvider 後,請務必取消註冊。

完成這些步驟後,系統就不會在不需要通知時繼續運作,避免耗用電力和可能導致記憶體流失。

重新叫用 NavigationApi#initForegroundServiceManager 方法時,請先叫用 NavigationApi#clearForegroundServiceManager

如果應用程式使用 ForegroundServiceManager,請先叫用 NavigationApi#clearForegroundServiceManager,再叫用 NavigationApi#initForegroundServiceManagerProvider。如果已初始化 ForegroundServiceManager,請叫用 NavigationApi#initForegroundServiceManagerMessageAndIntent。您可以在初始化前景服務管理員後,透過這項作業更新通知 ID 或通知內容。

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 的 AndroidManifest 中也包含 ACCESS_BACKGROUND_LOCATION 權限。這樣一來,Gradle 合併作業會處理權限,因此應用程式本身不需要宣告權限。不過,如果應用程式進入背景前未向使用者顯示通知,Navigation SDK 就會依賴系統提供位置資訊更新。這些系統更新可能不夠頻繁或準確,導致導航體驗不盡理想。因此,我們建議您也提示使用者授予背景位置資訊存取權。

應用程式開發人員如何提升導航定位精確度

更新應用程式,提示使用者授予背景位置資訊存取權,即可提高 Navigation SDK 所用位置資訊信號的準確度。詳情請參閱「要求『一律允許』位置資訊存取權」。