2017-10-10 57 views
0

我遇到一些奇怪的行为与我们的Android应用程序使用Fused location Provider Api。FusedLocationProviderClient.requestLocationUpdates没有得到海拔

在一些设备,这个API 没有返回海拔

我可以检查它,Moto G的2D一代,但我们的用户至少在Moto G的3D生成,Nexus 6和极限摩托游戏报告相同的行为。在绝大多数其他设备中,海拔高度都很好,所以我非常肯定我的Api实现是正确的。

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

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

应用程序已经开始接受的高度,不仅对“LocationListener的”订阅“的LocationManager”,但Fused Location Provider ApiLocationCallback也是如此。 但是这打破了Fused location Provider Api所做的优化,并且似乎使用两个apis都很愚蠢。

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

当我谈论不接受的高度我的意思是location.hasAltitude() == falselocation.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的一个bug,但我没有发现任何其他人报告,除了这种类似的行为:

Nexus 6 Fused Location Provider getSpeed returns 0

谢谢。

回答

0

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

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

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

但是,你没有办法为你修复FusedLocationProvider的不当行为,这是制造商配置失败。