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)
此问题是由新的 Google Play 服务更新(版本 21.30.16)引起的。
请参阅: https: //issuetracker.google.com/issues/198176818
截至 2021 年 9 月 9 日,他们表示:
我们暂时回滚了 isLocationAvailable() 周围的一些逻辑,您应该注意到在接下来的 24 小时左右的时间里行为恢复正常。
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |