為了降低耗電量,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
。經過最佳化處理,能盡可能減少耗電量。 - 使用被動位置監聽器。如果前景應用程式要求以較快的速度要求位置更新,這項功能可能會更快收到位置更新通知。
注意:如果應用程式需要存取包含頻繁更新的定位記錄,請使用整合式 LocationProvider API 元素的批次版本,例如 FusedLocationProviderApi
介面。應用程式在背景執行時,這個 API 接收使用者位置的頻率高於非批次 API。但請注意,應用程式每小時仍會以批次接收更新數次。
受影響的 API
背景應用程式的位置資訊擷取行為變更會影響下列 API:
- 整合式位置預測提供工具 (FLP)
-
-
如果應用程式在背景執行,定位系統服務每小時只會為您的應用程式計算幾次新位置。即使應用程式要求提高位置更新頻率也一樣。
不過,使用 FLP 的 批次處理版本,在應用程式收到批次更新後,即可存取更頻繁的定位記錄,而且每個小時只會發生幾次。
- 如果在前景執行,與 Android 7.1.1 (API 級別 25) 相比,位置取樣率沒有變化。
-
- 地理圍欄
-
- 背景應用程式接收地理圍欄轉換事件的頻率,會比整合式位置預測提供工具的更新更頻繁。
- 地理圍欄事件的平均回應速度為幾分鐘左右。
- GNSS 測量數據和 GNSS 導覽訊息
-
- 應用程式在背景執行時,已註冊接收
GnssMeasurement
輸出內容的回呼和GnssNavigationMessage
就會停止執行。
- 應用程式在背景執行時,已註冊接收
- 位置管理工具
-
-
系統每小時只會為背景應用程式提供數次位置更新。
注意:如果您的應用程式在已安裝 Google Play 服務的裝置上執行,強烈建議您改用整合式位置預測提供工具 (FLP)。
-
- Wi-Fi 管理員
startScan()
方法每小時只對背景應用程式執行幾次掃描。如果背景應用程式稍後再次呼叫該方法,WifiManager
類別會提供上一個掃描作業的快取結果。