FusedLocationProviderClient 始终报告 LocationAvailability false

Chr*_*ian 6 android google-maps kotlin fusedlocationproviderapi android-fusedlocation

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

描述表明它是错误的,意味着我不能指望从其他函数获取任何位置LocationCallback.onLocationResult(locationResult: LocationResult?),但结果很好,并且位置似乎足够正确。

有人可以告诉我,我是否可以简单地忽略isLocationAvailable = false并直接使用位置结果,而不冒任何获得错误读数或低准确度等的风险?

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

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

过去几周 FusedLocation 系统的内部运作是否发生了变化?多年来它一直运作良好吗?

代码:

var locationRequest: LocationRequest = LocationRequest.create().apply {
        interval = 10000
        fastestInterval = 5000
        priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY 
    }
Run Code Online (Sandbox Code Playgroud)

初始化并开始位置更新时,我使用以下片段:

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)
}
Run Code Online (Sandbox Code Playgroud)

并使用这个 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!
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lan 9

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

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

截至 2021 年 9 月 9 日,他们表示:

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

  • 谷歌的问题日志中还有更多内容可能值得一读:https://issuetracker.google.com/issues/198176818#comment37 - 这可以说使该状态毫无价值。 (4认同)