broadcastreceiver - FusedLocationProviderClient 在几次 LocationRequest 后停止给出 locationResult
问题描述
如果有人知道这个案子发生了什么,请帮忙。
我有注册到 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-6x FusedLocationProviderClient 之后尝试打开手机时,再也不会给出任何 locationResult。
当用户打开 MainActivity 时,第 6 次所有这个 locationResult 等最奇怪的部分将开始重新出现。
附加信息:我在 3 个模拟器上测试此代码:Nexus 5 API 23、PIXEL 3 API 29、Galaxy Nexus API 29。它适用于 Nexus 5 API 23。
有谁知道这种行为的原因是什么?非常感谢
解决方案
经过几天的努力,我在这里找到了解决方案: https ://developer.android.com/training/location/request-updates#continue-user-initiated-action
将此行添加到我的清单后,一切看起来都很好
<service
android:name="MyBackgroundService"
android:foregroundServiceType="location" ... >
...
我希望可以帮助陷入同样问题的人
推荐阅读
- android - 如何从 HashSet 中获取()特定元素?科特林
- asp.net - 使用 Google Apps 脚本将网页导入 Google 电子表格?
- java - 如何打印按属性排序的对象数组?
- python - 即使我没有使用 urlparse 也没有名为 'urlparse 的模块
- python - 如何在foreachpartition中获取行属性值
- python - 通过 webscraping 字典列表值创建打印值
- javascript - 开/关自动滚动切换到简码wordpress内的猫头鹰轮播
- c - 是什么导致此“存储地址空间不足”错误?
- curl - 如何通过命令行从 gitlab 项目“上传”下载文件
- ajax - 如果所有环境都相同,为什么相同的 jsf 代码只会在一个环境中失败?