【发布时间】:2021-11-03 16:08:51
【问题描述】:
我有一个应用程序已经运行了几年,但最近,我收到了有关定位系统无法正常运行的报告。
我已将问题追溯到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
}
在初始化和启动位置更新时,我使用以下片段:
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!
}
}
【问题讨论】:
标签: android google-maps kotlin fusedlocationproviderapi android-fusedlocation