【发布时间】:2017-10-10 08:18:02
【问题描述】:
我在使用 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);
该应用开始接收海拔高度,不仅在订阅了“LocationManager”的“LocationListener”上,还在Fused Location Provider Api 的LocationCallback 上。
但这打破了 Fused location Provider 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 上的错误,但我没有发现任何其他人报告此问题,除了类似的行为:
Nexus 6 Fused Location Provider getSpeed returns 0
谢谢。
【问题讨论】:
标签: android fusedlocationproviderapi