為降低耗電量,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 Location Provider API 元素的批次版本,例如 FusedLocationProviderApi
介面。當應用程式在背景執行時,這個 API 會比非批次 API 更頻繁地接收使用者的所在位置。不過,請注意,應用程式每小時仍只能接收數次的批次更新。
受影響的 API
背景應用程式中位置擷取行為的變更會影響下列 API:
- 整合式位置預測提供工具 (FLP)
-
-
如果應用程式在背景執行,位置系統服務每小時只能為應用程式計算幾次新位置。即使應用程式要求更頻繁的位置更新,也是如此。
不過,如果您使用 FLP 的 批次版本,應用程式收到批次更新後,您就能取得更多時間頻繁的位置記錄,而這類更新也只會每小時發生幾次。
- 如果應用程式在前景執行,位置取樣率與 Android 7.1.1 (API 級別 25) 版本相同。
-
- 地理圍欄
-
- 背景應用程式可比 Fused Location Provider 更頻繁地接收地理圍欄轉換事件。
- 地理圍欄事件的平均回應時間約為每隔幾分鐘。
- GNSS 測量資料和 GNSS 導航訊息
-
- 當應用程式處於背景時,註冊用於接收
GnssMeasurement
和GnssNavigationMessage
輸出的回呼會停止執行。
- 當應用程式處於背景時,註冊用於接收
- 位置管理工具
-
-
每小時只會向背景應用程式提供數次位置更新。
注意:如果應用程式是在已安裝 Google Play 服務的裝置上執行,強烈建議您改用Fused Location Provider (FLP)。
-
- Wi-Fi 管理員
-
startScan()
方法只會每小時對背景應用程式執行幾次完整掃描。如果背景應用程式在之後不久再次呼叫該方法,WifiManager
類別會提供先前掃描作業的快取結果。