FusedLocationProviderClient 在多次 LocationRequest 后停止给出 locationResult
Posted
技术标签:
【中文标题】FusedLocationProviderClient 在多次 LocationRequest 后停止给出 locationResult【英文标题】:FusedLocationProviderClient stop giving locationResult after several LocationRequest 【发布时间】:2020-08-30 23:26:05 【问题描述】:如果有人知道此案发生了什么,请提供帮助。
我有注册到 ForegroundService 的 BroadcastReceiver。此 BroadcastReceiver 将侦听 Intent.ACTION_SCREEN_ON 并在收到任何内容时调用 startLocationUpdates()。
fun startLocationUpdates(context: Context, entity: LockEntityDB?)
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
mSettingsClient = LocationServices.getSettingsClient(context)
mLocationCallback = object : LocationCallback()
override fun onLocationResult(locationResult: LocationResult?)
super.onLocationResult(locationResult)
val location = locationResult?.lastLocation
locationResult?.let
saveLocation(context, it.lastLocation)
locationUpdatesCount(context)
//something will do with entityDb
mOneTimeLocationRequest = LocationRequest().apply
interval = 5 * 1000
fastestInterval = 1000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
numUpdates = 1
val builder = LocationSettingsRequest.Builder()
builder.addLocationRequest(mOneTimeLocationRequest!!)
mLocationSettingsRequest = builder.build()
mSettingsClient
?.checkLocationSettings(mLocationSettingsRequest)
?.addOnSuccessListener
mFusedLocationClient?.requestLocationUpdates(mOneTimeLocationRequest, mLocationCallback, null)
?.addOnFailureListener e ->
kTimberLog(context, "loc " + e.toString())
所以如果用户打开手机,它会发送 Intent.ACTION_SCREEN_ON 和 FusedLocationProviderClient 将更新实际用户位置。
问题是,当用户在 5-6 次 FusedLocationProviderClient 之后尝试打开手机时,再也不会给出任何 locationResult。
当用户打开 MainActivity 时,第 6 次所有 locationResult 中最奇怪的部分将开始重新出现。
附加信息:我正在 3 个模拟器上测试此代码:Nexus 5 API 23、PIXEL 3 API 29、Galaxy Nexus API 29。它适用于 Nexus 5 API 23。
有人知道这种行为的原因是什么吗?非常感谢
【问题讨论】:
【参考方案1】:经过几天的努力,我在这里找到了解决方案: https://developer.android.com/training/location/request-updates#continue-user-initiated-action
将此行添加到我的清单后,一切看起来都正常
<service
android:name="MyBackgroundService"
android:foregroundServiceType="location" ... >
...
我希望可以帮助遇到同样问题的人
【讨论】:
以上是关于FusedLocationProviderClient 在多次 LocationRequest 后停止给出 locationResult的主要内容,如果未能解决你的问题,请参考以下文章