首页 > 解决方案 > 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。

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

标签: broadcastreceiverforeground-serviceandroid-fusedlocationfusedlocationproviderclient

解决方案


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

将此行添加到我的清单后,一切看起来都很好

<service
android:name="MyBackgroundService"
android:foregroundServiceType="location" ... >
...

我希望可以帮助陷入同样问题的人


推荐阅读