如何获取Android设备用户移动的速度? Location.getSpeed 可靠吗?

Posted

技术标签:

【中文标题】如何获取Android设备用户移动的速度? Location.getSpeed 可靠吗?【英文标题】:How to obtain the speed that the user of an Android device is moving? Is Location.getSpeed reliable? 【发布时间】:2014-03-05 21:10:57 【问题描述】:

我正在尝试从他们的 android 设备获取用户的速度,但哪种方法最可靠?

有使用GPS的location.getSpeed()功能;这是获得速度的可靠方法吗?我是否应该使用获得的 GPS 坐标手动计算速度?还是我缺少其他方法来完成此操作?

【问题讨论】:

【参考方案1】:

IMO,Android 上当前的最佳方法是使用 Location.getSpeed() 以及 Google Services Location API 和融合位置提供程序。然后,根据Google Play Services Activity Recognition 实际检查这个值。

融合位置提供程序集成了其他一些车载传感器来调整位置数据,这比单独使用 GPS 更好。然后,检查ActivityRecognition.getMostProbableActivity() 方法。如果DetectedActivitySTILL 类型,那么你的真实速度可能等于0。如果是ON_FOOT,它可能是低速(例如,1 m/s)。如果它是ON_BICYCLEIN_VEHICLE,你可能没问题依赖直接从Location.getSpeed() 获得的速度输出。您还需要检查DetectedActivity.getConfidence() 的值,并设置您自己的阈值,以便在依赖这些值时提供“自信”的置信水平:)。

我也绝对建议您简单地平均顺序位置以获得两个位置之间的平均速度(如果您这样做,它需要是大量位置的平均值)。在我对移动设备的基准测试中(参见我的论文here,尤其是第 105-106 页和第 137-138 页),我发现由 GPS 子系统(通常基于 Doppler shift of GPS carrier signals)计算的瞬时速度到比从 GPS 导出的位置要准确得多。在我测试的 Sanyo Pro 200 上,在室内静止时(仅使用辅助 GPS,没有传感器融合)观察到的第 95 个百分位的速度为 1 m/s。在我评估的一些智能能源管理技术中,我能够使用速度数据(参见第 137-138 页)过滤掉大量位置异常值。借助传感器融合和活动识别来帮助过滤异常值,在类似设备上的准确性应该会更好。

最后,我怎么强调都不为过,您是否在真实设备上进行过测试,尽可能多地进行测试,最好是最流行的型号。 Android 有各种各样的 OEM 推出设备,它们都有自己的怪癖。最好的办法是创建针对最流行模型的解决方案,并承认让解决方案在所有模型上都完美运行是不现实的。

【讨论】:

您论文的链接失效了,请您修复一下,真的可以帮到我。谢谢!【参考方案2】:

似乎 getSpeed() 方法并不总是可靠的,尤其是在低速和 gps 覆盖范围不是最佳时。 您可以查看this question 和this one,它们都是关于getSpeed() 的替代方案。 不过,android developper page 表示使用 Google Location API 可以获得更好的性能。

因此,选择似乎取决于您的应用程序的使用情况:如果您的目标是在 GPS 覆盖范围较差的区域(在树林中行走)进行缓慢位移,请使用您自己的实现。在 GPS 覆盖范围广的区域内快速运行,请使用 Google Location API。

【讨论】:

【参考方案3】:

对于移动速度快于步行速度的设备,最好的方法是直接使用 location.getSpeed()。

对于行人或其他慢速情况,这并不容易,也许根本不可能有一个当前有效的有效慢速。 有些人尝试评估历史并进行平均或基于阈值的方法,这将针对特定的应用程序/用途进行改进。

但最简单的方法是将您的应用设计为忽略低速。

一些与速度相关的链接:GPS position correctionSmooth GPS data

【讨论】:

以上是关于如何获取Android设备用户移动的速度? Location.getSpeed 可靠吗?的主要内容,如果未能解决你的问题,请参考以下文章

Matlab从移动设备获取加速度数据对步数进行计数

如何获取设备独立的本地日期和时间Android

Android:使用加速度计的速度计算不正确

如何获取android移动设备的当前位置经纬度?

如何使用java在android移动设备中获取位图uri

获取设备移动的速度