簡體   English   中英

Android Kotlin:當應用程序處於打盹模式時獲取位置

[英]Android Kotlin : Getting location when app is in doze mode

我試圖每 2 秒獲取應用程序用戶的當前位置。

我已經使用帶有通知的前台服務(可以在應用程序處於后台時記錄位置)。 但是當應用程序進入打盹模式時,它會在屏幕變黑后繼續提供 3 個位置。 但隨后將停止向我提供位置更新。

我正在使用FusedLocationProviderClient來獲取我當前的位置。 我有一個WakeLock來保持服務運行,這很有效。 為了測試這一點,我運行了一個 coourtine,我可以執行println("test")但是當我想要我的位置時,我什么也得不到。

fusedLocationProviderClient?.getCurrentLocation(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY, cancellationSource?.token)?
.addOnSuccessListener {
   val loc = it
   println("${loc.latitude},${loc.longitude}")
   postNewLocation(loc)
}?.addOnCanceledListener {
     println("cancel")
}

就在我獲得最后一次位置更新后,我得到了這個LocationEngineResult == null

有誰知道我做錯了什么? 任何幫助或提示都會很棒。

對於上下文,我使用 Android 11 和 targetsdkversion 30。

我是 kotlin 的初學者,這是我必須完成的學校項目。

當設備處於打盹模式時,您無法接收位置。 引用 Google 代表對 Google 問題跟蹤器上某個問題的評論:

未在打盹模式下交付的位置是設計使然。 當打盹模式處於活動狀態時,我們會盡最大努力提供位置信息,即如果手機因其他原因喚醒,我們會提供位置信息,否則我們不會喚醒手機只是為了提供位置信息

參考

筆記:
你可能會說前台服務不應該受到打盹模式的影響。 它不是。 它是位置提供者。

更新:
打盹模式僅在“用戶將設備不插電並靜止一段時間,屏幕關閉時”才會激活。 因此,如果設備在一個位置靜止,則無需跟蹤該時間段的位置。

不知道打盹模式是否是您的問題。 電池優化是另一個問題。 對於某些手機,當電池優化打開且屏幕關閉時,位置提供程序會被禁用。 您可以使用PowerManager.getLocationPowerSaveMode()檢查此行為。 模式是:

  1. LOCATION_MODE_FOREGROUND_ONLY
  2. LOCATION_MODE_GPS_DISABLED_WHEN_SCREEN_OFF
  3. LOCATION_MODE_NO_CHANGE
  4. LOCATION_MODE_THROTTLE_REQUESTS_WHEN_SCREEN_OFF

此外,某些電話供應商已經創建了不符合標准 Android 行為的電話。 檢查這個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM