FusedLocationProviderClient.requestLocationUpdates 没有获得高度
FusedLocationProviderClient.requestLocationUpdates not getting altitudes
我在使用 Fused location Provider Api 的 Android 应用程序时遇到了一些奇怪的行为。
在某些设备中,此 api 不会返回海拔高度
我可以在 Moto G 2d generation 上检查它,但我们的用户报告至少在 Moto G 3d generation、Nexus 6 和 Moto X Play 上有相同的行为。在绝大多数其他设备中,高度恢复良好,所以我很确定我对 Api 的实现是正确的。
有趣的是我意识到如果我使用 android.location.LocationManager
,例如,像这样
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);
该应用程序开始接收高度,不仅在订阅 'LocationManager' 的 'LocationListener' 上,而且在 Fused Location Provider Api
的 LocationCallback
上也是如此。
但这打破了 Fused location Provider Api 所做的优化,同时使用这两个 api 似乎很愚蠢。
如果我同时使用 google 地图和我们的应用程序,我可能会遇到类似的行为。在使用 google 地图时,我们的应用程序正在接收海拔高度,但是当 google 地图关闭时,Fused Location Provider Api 也会停止发送海拔高度。
当我说没有收到高度时,我的意思是 location.hasAltitude() == false
和 location.getAltitude() == 0
这是我请求位置更新的实现:
LocationServices.getFusedLocationProviderClient(context);
LocationRequest currentLocationRequest = new LocationRequest();
currentLocationRequest.setInterval(500)
.setFastestInterval(0)
.setMaxWaitTime(0)
.setSmallestDisplacement(0)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
fusedLocationProviderClient.requestLocationUpdates(currentLocationRequest, locationCallback);
在我看来,FusedLocationProviderClient 没有打开此设备上的某些硬件,因此可能是此 Api 上的一个错误,但我没有发现任何其他报告,除了这个类似的行为:
Nexus 6 Fused Location Provider getSpeed returns 0
谢谢。
由于 hasAltitude()
return 和 false
FusedLocationProvider
缺少一些参数,这些参数可以提供可靠的高度。这在很大程度上取决于制造商的设置和设备功能,这是提供程序存在的原因之一。
原因也可能是 GPS 锁定不足或其他原因,但由于您可以将范围缩小到某些设备,我希望这不是问题所在。
您可以尝试(正如您已经做过的那样)其他位置数据源并检查它们的结果 return 是否为海拔高度,但请记住,这可能不太一致。我的第一个尝试是使用旧的 Location 提供程序。
但是您无法修复 FusedLocationProvider
的错误行为,这是制造商配置失败。
我在使用 Fused location Provider Api 的 Android 应用程序时遇到了一些奇怪的行为。
在某些设备中,此 api 不会返回海拔高度
我可以在 Moto G 2d generation 上检查它,但我们的用户报告至少在 Moto G 3d generation、Nexus 6 和 Moto X Play 上有相同的行为。在绝大多数其他设备中,高度恢复良好,所以我很确定我对 Api 的实现是正确的。
有趣的是我意识到如果我使用 android.location.LocationManager
,例如,像这样
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);
该应用程序开始接收高度,不仅在订阅 'LocationManager' 的 'LocationListener' 上,而且在 Fused Location Provider Api
的 LocationCallback
上也是如此。
但这打破了 Fused location Provider Api 所做的优化,同时使用这两个 api 似乎很愚蠢。
如果我同时使用 google 地图和我们的应用程序,我可能会遇到类似的行为。在使用 google 地图时,我们的应用程序正在接收海拔高度,但是当 google 地图关闭时,Fused Location Provider Api 也会停止发送海拔高度。
当我说没有收到高度时,我的意思是 location.hasAltitude() == false
和 location.getAltitude() == 0
这是我请求位置更新的实现:
LocationServices.getFusedLocationProviderClient(context);
LocationRequest currentLocationRequest = new LocationRequest();
currentLocationRequest.setInterval(500)
.setFastestInterval(0)
.setMaxWaitTime(0)
.setSmallestDisplacement(0)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
fusedLocationProviderClient.requestLocationUpdates(currentLocationRequest, locationCallback);
在我看来,FusedLocationProviderClient 没有打开此设备上的某些硬件,因此可能是此 Api 上的一个错误,但我没有发现任何其他报告,除了这个类似的行为:
Nexus 6 Fused Location Provider getSpeed returns 0
谢谢。
由于 hasAltitude()
return 和 false
FusedLocationProvider
缺少一些参数,这些参数可以提供可靠的高度。这在很大程度上取决于制造商的设置和设备功能,这是提供程序存在的原因之一。
原因也可能是 GPS 锁定不足或其他原因,但由于您可以将范围缩小到某些设备,我希望这不是问题所在。
您可以尝试(正如您已经做过的那样)其他位置数据源并检查它们的结果 return 是否为海拔高度,但请记住,这可能不太一致。我的第一个尝试是使用旧的 Location 提供程序。
但是您无法修复 FusedLocationProvider
的错误行为,这是制造商配置失败。