[英]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()
檢查此行為。 模式是:
此外,某些電話供應商已經創建了不符合標准 Android 行為的電話。 檢查這個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.