【问题标题】:Bearing and Speed are not available when minTime and minDistance are set in Android Things在 Android Things 中设置 minTime 和 minDistance 时,方位和速度不可用
【发布时间】:2019-11-26 01:30:00
【问题描述】:

我在设置参数 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);

【问题讨论】:

  • ...移动3米有效果吗?
  • 我在外面做了测试,走了大约 500m,

标签: android gps android-things bearing


【解决方案1】:

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

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

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

解决方法 1

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

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

解决方法 2

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

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

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

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 2018-04-13
    • 2011-04-02
    • 2023-03-04
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多