背景位置資訊限制

為降低耗電量,Android 8.0 (API 級別 26) 會限制應用程式在背景執行時,擷取使用者目前位置的頻率。在這些條件下,應用程式每小時只能接收數次的位置更新。

注意: 這些限制適用於搭載 Android 8.0 (API 級別 26) 以上版本的裝置上使用的所有應用程式,無論應用程式的目標 SDK 版本為何

如果應用程式需要在背景執行時進行即時快訊或動作偵測,這項位置資訊擷取行為特別重要。

保留前景應用程式行為

如果應用程式在搭載 Android 8.0 (API 級別 26) 的裝置上於前景執行,則位置更新行為與 Android 7.1.1 (API 級別 25) 以下版本相同。

警告:如果應用程式長時間擷取近乎即時的位置更新,裝置的電池續航力就會大幅縮短。

調整應用程式的位置行為

如果應用程式不常收到位置更新,請考量應用程式在背景執行的用途。如果是這種情況,您可以執行下列任一動作,更頻繁地擷取位置更新通知:

  • 讓應用程式顯示在前景。
  • 透過呼叫 startForegroundService() 在您的應用程式中啟動前景服務。當這類前景服務啟用時,它會在通知區域中顯示為持續性通知。

    注意:如果應用程式在搭載 Android 11 (API 級別 30) 以上版本的裝置在背景執行時啟動前景服務,則除非使用者已授予應用程式的 ACCESS_BACKGROUND_LOCATION 權限,否則應用程式將無法存取位置資訊。詳情請參閱與前景服務相關的使用期間限制指南。

  • 使用 Geofencing API 的元素,例如專為盡可能減少耗電量而最佳化的 GeofencingClient
  • 使用被動位置事件監聽器,如果前景應用程式會以更快的速度要求位置更新,則較快接收位置更新通知。

注意:如果應用程式需要存取含有經常更新的定位記錄,請使用 Fused LocationProvider API 元素的批次處理版本,例如 FusedLocationProviderApi 介面。當應用程式在背景執行時,比起非批次 API,此 API 更常接收使用者的位置資訊。不過請注意,應用程式每小時仍會批次收到更新數次。

受影響的 API

背景應用程式中的位置擷取行為變更會影響下列 API:

整合式位置預測提供工具 (FLP)
  • 如果應用程式在背景執行,定位服務系統每小時只會計算應用程式的新位置數次。即使應用程式要求更頻繁地更新位置,也是如此。

    但只要使用 FLP 的 批次更新版本,您就能在應用程式收到批次更新後存取更頻繁的定位記錄。這些更新也每小時只會執行數次。

  • 如果您的應用程式在前景執行,與 Android 7.1.1 (API 級別 25) 相比,位置取樣率沒有任何變動。
地理圍欄
  • 比起整合式位置預測提供工具的更新,背景應用程式可以更常接收地理圍欄轉換事件。
  • 地理圍欄事件的平均回應速度為每幾分鐘左右一次。
GNSS 測量資料和 GNSS 導航訊息
地點管理工具
  • 背景應用程式每小時只會提供數次位置更新。

    注意:如果應用程式在已安裝 Google Play 服務的裝置上執行,強烈建議您改用整合式位置預測提供工具 (FLP)

Wi-Fi 管理員
startScan() 方法每小時只會對背景應用程式執行數次完整掃描。如果背景應用程式之後很快又再次呼叫該方法,WifiManager 類別就會提供先前掃描作業的快取結果。