我刚刚更新了我的位置 API 以使用 FusedLocationProviderClient,但我遇到了这个问题,当我关闭并打开 GPS 时,我总是得到空位置:
val fusedLocationProviderClient =
LocationServices.getFusedLocationProviderClient(callingActivity)
fusedLocationProviderClient.flushLocations()
getLocationRequest()
checkLocationSettings(callingActivity, turnOnGpsRequestCode, callback) {
// Location settings successful
fusedLocationProviderClient.lastLocation
.addOnSuccessListener(callingActivity) {
location ->
// Here location is always null
callback.onCallback(MenumyRadar.RadarStatus.SUCCESS, location)
}
.addOnFailureListener {
callback.onCallback(MenumyRadar.RadarStatus.ERROR_UNKNOWN, null)
}
}
直到我打开另一个使用位置的应用程序(例如 Google 地图或 Uber)后,它才会起作用。
感谢这个答案,我有了一些线索FusedLocationApi.getLastLocation 始终为 null https://stackoverflow.com/questions/29441384/fusedlocationapi-getlastlocation-always-null
谷歌的解释是:
fusedLocationClient.lastLocation
.addOnSuccessListener {
地点:地点? ->
// 获取最后已知位置。在一些罕见的情况下,这可能为空。
}
getLastLocation() 方法返回一个 Task,您可以使用它来获取具有纬度和经度坐标的 Location 对象
的地理位置。位置对象可能为空
以下情况:
设备设置中的位置已关闭。结果可能是
即使之前检索到了最后一个位置,也为 null,因为
禁用位置也会清除缓存。设备从未记录过
它的位置,这可能是新设备或旧设备的情况
已恢复出厂设置。 Google Play 服务
设备已重新启动,并且没有活动的融合位置提供程序
服务重新启动后请求位置的客户端。到
避免这种情况,您可以创建一个新客户端并请求位置
更新你自己。有关详细信息,请参阅接收位置
更新。
但它没有说如何处理这个问题,我该怎么办?
我找到了一个解决方案,这就是发生的情况,当位置为空时,意味着位置缓存被清除,这种情况发生在关闭GPS时,所以当我打开它时,没有最后一个位置可以获取,我所做的是这样的:
checkLocationSettings(callingActivity, turnOnGpsRequestCode, callback) {
// Location settings successful
mFusedLocationProviderClient!!.lastLocation
.addOnSuccessListener(callingActivity) {
location ->
if (location == null || location.accuracy > 100) {
mLocationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult?) {
stopLocationUpdates()
if (locationResult != null && locationResult.locations.isNotEmpty()) {
val newLocation = locationResult.locations[0]
callback.onCallback(Status.SUCCESS, newLocation)
} else {
callback.onCallback(Status.ERROR_LOCATION, null)
}
}
}
mFusedLocationProviderClient!!.requestLocationUpdates(getLocationRequest(),
mLocationCallback, null)
} else {
callback.onCallback(Status.SUCCESS, location)
}
}
.addOnFailureListener {
callback.onCallback(Status.ERROR_UNKNOWN, null)
}
}
当位置为空时,开始使用回调请求位置并
mFusedLocationProviderClient!!.requestLocationUpdates(getLocationRequest(),
mLocationCallback,空)
然后,当调用回调时,将获取新位置并再次开始获取位置。
有时,当你打开GPS时,位置不为空,但精度很差,所以我也会检查位置精度是否足够好(对我来说足够好是100米)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)