【问题标题】:FusedLocationProviderClient.requestLocationUpdates not getting altitudesFusedLocationProviderClient.requestLocationUpdates 没有得到高度
【发布时间】: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 ApiLocationCallback 上。 但这打破了 Fused location Provider Api 所做的优化,同时使用这两个 api 似乎很愚蠢。

如果我同时使用谷歌地图和我们的应用程序,我会遇到类似的行为。在使用谷歌地图时,我们的应用正在接收高度,但是当谷歌地图关闭时,融合位置提供程序 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 上的错误,但我没有发现任何其他人报告此问题,除了类似的行为:

Nexus 6 Fused Location Provider getSpeed returns 0

谢谢。

【问题讨论】:

    标签: android fusedlocationproviderapi


    【解决方案1】:

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

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

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

    但是您无法修复 FusedLocationProvider 的不当行为,这是制造商配置失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多