1

我在设置参数 minTime 和 minDistance 时遇到问题,返回的位置没有速度和方位信息,我在 Raspberry PI 中使用 AndroidThings。我在 Android 手机 7.0 版中运行了另一个版本,它按预期工作。

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,300, 3, mLocationListener);

如果我将值更改为 0 那么它工作正常:

mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, mLocationListener);
4

1 回答 1

0

这很有趣,我可以推测您的手机支持此功能的原因,而您的 Pi 不支持,但事实证明文档中提到了该问题:

LocationManager 生成的所有位置都保证具有有效的纬度、经度和时间戳……所有其他参数都是可选的。

好消息是,变通方法很容易获得,它们使您可以控制速度/轴承语义(否则可能留给LocationManager逻辑的 OEM 实现)。

解决方法 1

  • 保留上一次修复
  • 对于出现的每个新修复,使用lastFix.bearingTo(newFix)( docs ) 将其与上一个修复进行比较。速度同样可以从 A.)distanceTo()和 B.) 经过时间计算,即newFix.getTime() - lastFix.getTime()

使用此解决方法,每个方位被定义为从上次修复到当前修复的方位,并且在新修复出现后立即可用。

解决方法 2

  • 设置minTimeminDistance为 0
  • 保留“第一个”修复
  • 在每个新修复出现时更新速度/方位(在 UI 上显示,或其他)。
  • 使用您自己的逻辑来确定从“第一次”修复(使用上面提到的方法)开始的修复何时超过 3m/300ms,并在此之前忽略所有纬度/经度。然后,当然,您将“第一个”修复替换为当前修复,然后重复。

使用此解决方法,任何给定时刻的方位和速度都不对应于下一个“官方”修复(但如果正确集成到每个单独的“迷你修复”上,它们可以)。

我不知道这种更高的更新率是否对您的 Pi 有任何电源管理影响,但我对此表示怀疑。换句话说,就电池效率而言,它不应该让你付出任何代价。

于 2019-11-26T13:56:57.887 回答