首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FusedLocationProviderClient总是报告LocationAvailability假

FusedLocationProviderClient总是报告LocationAvailability假
EN

Stack Overflow用户
提问于 2021-09-06 15:08:10
回答 2查看 566关注 0票数 6

我有一个已经运行了几年的应用程序,但是最近,我收到了关于定位系统不能正常工作的报告。我把这个问题追溯到了LocationCallback.onLocationAvailability(availability: LocationAvailability?)。它总是与availability.isLocationAvailable = false一起调用。

描述表明它是假的,这意味着我不能指望从其他函数LocationCallback.onLocationResult(locationResult: LocationResult?)中得到任何位置,但是结果很好,而且这个位置似乎足够正确。

谁能告诉我,我是否可以简单地忽略isLocationAvailable = false,只使用他们的定位结果,而不冒任何风险得到错误的读数或低精度或诸如此类的?

我为LocationRequest尝试过不同的设置,其中任何一个都没有问题--只是可用性仍然会被false调用。结果本身很好。

权限是公平和公正的,我也尝试过只使用ACCESS_FINE_LOCATION,只使用ACCESS_COARSE_LOCATION,而且两者都有。设备上启用了位置。

在过去的几周里,FusedLocation系统的内部运作是否发生了变化?它已经完美运作多年了?

代码:

代码语言:javascript
复制
var locationRequest: LocationRequest = LocationRequest.create().apply {
        interval = 10000
        fastestInterval = 5000
        priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY 
    }

在初始化和启动位置更新时,我使用以下代码段:

代码语言:javascript
复制
val locationClient = LocationServices.getFusedLocationProviderClient(this)
val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
val client: SettingsClient = LocationServices.getSettingsClient(this)
val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
task.addOnSuccessListener { locationSettingsResponse ->
    locationClient?.requestLocationUpdates(locationRequest, locationCallback, null)
}

使用这个LocationCallback:

代码语言:javascript
复制
val locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult?) {
        locationResult ?: return
        if (locationResult.locations.isNotEmpty()) {
            val location = locationResult.locations[0]
        }
    }
    override fun onLocationAvailability(availability: LocationAvailability?) {
         availability?.isLocationAvailable          <-- This is always false!
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-10 09:50:55

此问题是由新的Google服务更新(21.30.16版)引起的。

请参阅:https://issuetracker.google.com/issues/198176818

根据2021年9月9日,他们说:

我们暂时回滚了一些关于isLocationAvailable()的逻辑,您应该注意到行为在接下来的24小时左右恢复正常。

票数 9
EN

Stack Overflow用户

发布于 2021-09-09 15:47:52

您的问题可能归因于更新的关于用户位置的GooglePlay策略。几年前生效的GDPR ()规定,用户的位置是个人可识别信息,所以在使用这些数据之前,需要征得用户的同意。

这仅仅意味着在清单权限中添加ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION是不够的。您需要在运行时请求用户的权限。

有关在运行时请求位置权限的详细信息,请参阅这里这里

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

https://stackoverflow.com/questions/69076730

复制
相关文章

相似问题

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