首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FusedLocationProviderClient在几次LocationRequest后停止给locationResult

FusedLocationProviderClient在几次LocationRequest后停止给locationResult
EN

Stack Overflow用户
提问于 2020-05-14 20:18:33
回答 1查看 44关注 0票数 1

如果有人知道这件事发生了什么,请帮忙。

我有注册到ForegroundService的BroadcastReceiver。此BroadcastReceiver将侦听Intent.ACTION_SCREEN_ON并调用startLocationUpdates() (如果它接收到任何)。

代码语言:javascript
复制
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时,所有这些locationResult会重复出现6次,以此类推。

附加信息:我正在3个模拟器上测试此代码: Nexus 5 API 23,PIXEL 3 API 29,Galaxy Nexus API 29。它在Nexus 5 API 23上工作得很好。

有谁知道这种行为的原因是什么?非常感谢

EN

回答 1

Stack Overflow用户

发布于 2020-05-15 01:01:47

经过几天的努力,我在这里找到了解决方案:https://developer.android.com/training/location/request-updates#continue-user-initiated-action

将这一行添加到我的清单中之后,一切看起来都很正常

代码语言:javascript
复制
<service
android:name="MyBackgroundService"
android:foregroundServiceType="location" ... >
...

我希望能帮助那些陷入同样问题的人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61797168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档