当前位置: 首页 > 知识库问答 >
问题:

FusedLocationProviderClient始终报告LocationAvailability false

佘修为
2023-03-14

我有一个应用程序已经上线几年了,但是最近,我收到了关于定位系统不能正常运行的报告。我已经追踪到了LocationCallback。onLocationAvailability(可用性:LocationAvailability?) 。它总是使用可用性调用。isLocationAvailable=false

描述表明它为false,这意味着我不能指望从另一个函数LocationCallback获取任何位置。onLocationResult(locationResult:locationResult?) 但结果很好,位置似乎足够正确。

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

我已经尝试了不同的位置请求设置,它们中的任何一个都没有问题——除了可用性仍然被调用为false。结果本身很好。

权限是公平的,我也尝试了ACCESS\u FINE\u LOCATIONonly、ACCESS\u rough\u LOCATIONonly和这两个选项。在设备上启用了位置。

在过去的几个星期里,Fused位置系统的内部工作有什么变化吗?多年来一直运作良好?

var locationRequest: LocationRequest = LocationRequest.create().apply {
        interval = 10000
        fastestInterval = 5000
        priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY 
    }

初始化和启动位置更新时,我使用以下剪报:

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:

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!
    }
}

共有2个答案

宣煜
2023-03-14

您的问题可能归因于更新的谷歌应用商店关于用户位置的政策。几年前生效的GDPR(通用数据保护条例)规定,用户的位置是个人识别信息,因此现在需要用户的同意才能使用这些数据。

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

有关在运行时请求位置权限的详细信息,请参阅此处和此处。

苏振国
2023-03-14

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

见:https://issuetracker.google.com/issues/198176818

就在2021年9月9日,他们说:

我们已经暂时回滚了一些围绕isLocation可用性()的逻辑,您应该注意到在接下来的24小时左右,行为会恢复正常。

 类似资料:
  • JaCoCo报告总是显示0%的覆盖率,但是Intellij集成报告是可以的。我已经看到其他StackOverflow问题,但没有帮助。下面是我在pom.xml配置中的jacoco-plugin和surefire-plugin snnipet: 编辑: 我最后的尝试是命令肯定火和哈科插件,但它不起作用。与肯定火和哈科插件有什么关系吗?

  • 在索尼Xperia Z2上的onLocation可用性回调中,FusedLocationProviderClient总是返回false。权限已授予,位置已启用。在位置偏好设置选项使用无线上网,网络和全球定位系统。模拟器,三星,BQ,Nexus,小米一切正常。操作系统版本从6到8。但是在索尼(andorid 6.0.1)我有这个问题。有什么想法吗?我已经结束了 回拨 要求

  • 我使用Flink SQL计算基于事件时间的窗口分析。在我的数据源每天晚上空闲之前,一切都正常工作,之后直到第二天数据再次开始流动时才产生最后一分钟的结果。 我已尝试将<code>设置为table.exec.source。空闲超时,但没有帮助。我能做什么?

  • 我正在从. jasper文件加载jasper报告文件以提高性能,如下所示。 但是我现在有一个要求,动态形成的查询必须设置为. jasper(编译)文件。有没有办法做同样的事情?

  • 在一个配置了多个应用项目和多个 Library 项目的多项目里,当同时运行所有测试的时候,测试结果整合到一份测试报告中可能是非常有用的。 为了实现这个目的,需要在同一个配置中添加另一个插件。可以通过以下方式添加: buildscript { repositories { jcenter() } dependencies { classpath