我正在体验一些奇怪的行为,我们的Android应用程序使用融合位置提供商Api。
在某些设备中,此api 不返回高度。
我可以在Moto G2d代上检查它,但我们的用户至少在Moto G3D生成、Nexus 6和Moto X Play上报告了相同的行为。在大多数其他设备中,高度恢复得很好,所以我非常肯定我对Api的实现是正确的。
有趣的是,我意识到如果我使用android.location.LocationManager,例如,像这样
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 500, 0, locationListener);这款应用程序开始接收高度,不仅在“LocationListener”订阅了“LocationManager”,而且还在“LocationCallback of Fused Location Provider Api”上。但是这破坏了融合位置提供程序Api所做的优化,使用这两种Api似乎很愚蠢。
如果我同时使用谷歌地图和我们的应用程序,我可以体验到类似的行为。虽然使用谷歌地图,我们的应用程序正在接收高度,但当谷歌地图关闭,融合位置提供商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上的一个bug,但是我没有发现其他人报告这个问题,除了这种类似的行为:
Nexus 6 Fused Location Provider getSpeed returns 0
谢谢。
发布于 2017-10-10 08:30:35
由于hasAltitude()返回false,所以FusedLocationProvider中缺少参数,这将使提供一个自信的高度成为可能。这在很大程度上取决于制造商的设置和设备功能,这也是供应商存在的原因之一。
原因也可能是GPS锁定不足或其他原因,但由于您可以将其缩小到某些设备上,所以我希望这不是问题所在。
您可以尝试(就像您已经做的那样)其他位置数据源,并检查它们的结果是否返回一个高度,但请记住,这可能是不一致的。我的第一次尝试将是旧的位置提供商。
但是,您无法修复FusedLocationProvider的错误行为,这是制造商配置失败。
https://stackoverflow.com/questions/46661793
复制相似问题