FusedLocationProviderClient.requestLocationUpdates未获得高度

时间:2017-10-10 08:18:02

标签: android fusedlocationproviderapi

我使用Fused location Provider Api在我们的Android应用中遇到了一些奇怪的行为。

在某些设备中,此api 未返回高度

我可以在Moto G 2d代上查看它,但我们的用户至少在Moto G 3d代,Nexus 6和Moto X Play上报告了相同的行为。在绝大多数其他设备中,高度恢复良好,因此我非常确定我对Api的实现是正确的。

有趣的是,我意识到如果我使用android.location.LocationManager ,例如,像这样

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);

该应用程序开始接收海拔高度,而不仅仅是在' LocationListener'订阅了#LocationManager'但也在LocationCallback的{​​{1}}上。 但是这打破了Fused location Provider Api所做的优化,并且使用这两种apis似乎很愚蠢。

如果我同时使用谷歌地图和我们的应用程序,我会遇到类似的行为。在使用谷歌地图时,我们的应用程序正在接收高度,但当谷歌地图关闭时,融合位置提供商Api也会停止发送高度。

当我谈论不接收高度时,我的意思是Fused Location Provider Apilocation.hasAltitude() == false

这是我请求位置更新的实现:

location.getAltitude() == 0

在我看来,FusedLocationProviderClient没有在这个设备上打开一些硬件,所以可能是这个Api上的一个错误,但我没有发现任何其他人报告这个,除了这个类似的行为:

Nexus 6 Fused Location Provider getSpeed returns 0

感谢。

1 个答案:

答案 0 :(得分:0)

由于hasAltitude()返回falseFusedLocationProvider缺少一些参数,可以证明自信的高度。这在很大程度上取决于制造商设置和设备功能,这是提供商存在的原因之一。

原因也可能是GPS锁定不足或其他原因,但由于您可以将其缩小到某些设备,我认为这不是问题。

您可以尝试(如您所知)其他位置数据源并检查其结果是否返回高度,但请记住,这可能不太一致。我的第一次尝试将是旧的位置提供商。

但是你无法解决FusedLocationProvider的错误行为,这是制造商配置失败。