3

我刚刚意识到,在 android 上,您从 GPS 位置更新获得的时间戳自纪元以来以毫秒为单位,而 SensorEvent 更新(例如加速度计)的时间戳自启动以来以 ns 为单位。

我想将 GPS 时间戳转换为 SensorEvent 时间戳的格式,有人知道这样做的好方法吗?

我尝试了以下方法:我测量了自纪元以来系统启动的时间:

startupTime = System.currentTimeMillis() - SystemClock.uptimeMillis();

对于每个 gps 位置更新,我减去启动时间:

timestamp = loc.getTime() - startupTime;

但是那些转换后的时间戳仍然不符合 SensorEvent 时间戳,仍然存在几秒钟的差异......

4

3 回答 3

2

不要使用SystemClock.uptimeMillis(),因为它测量自启动以来的时间,而不是设备处于睡眠模式的时间。而是使用SystemClock.elapsedRealtime().

于 2012-08-09T21:02:32.697 回答
1

我目前正在查看压力传感器事件的响应,并且报告的时间戳自纪元以来似乎以纳秒为单位。如果你除以 1,000,000,你应该得到一个可比较的值;这是我在以毫秒为单位找出传感器值的年龄时所看到的。

我会将 SensorEvent 时间戳除以 1000000,这应该会给您一个与您从 GPS 获得的 Location 对象提供的 getTime() 方法相当的值。

参考:

http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp(但它没有说明使用什么时钟)

http://developer.android.com/reference/java/lang/System.html#currentTimeMillis()

http://developer.android.com/reference/android/location/Location.html#getTime()

于 2013-04-25T21:01:07.460 回答
0

就个人而言,System.currentTimeMillis()每当我获得 GPS 位置或传感器事件时,我都会打电话,并将其记录为比较这些事件的适当时间戳。相对而言,它应该精确到几毫秒内,这意味着除非在 GPS 定位后一毫秒左右发生传感器事件,否则使用此方法您将始终获得正确的“之前”和“之后”关系。此外,很难想象将这些时间精确到几毫秒的任何应用程序实际上很重要,因此这应该是一种简单而好的技术。

loc.getTime() 来自 gps 接收器,与 System.currentTimeMillis() 非常不同。除非您尝试将手机的时钟设置为与所谓的“gps 时间”同步,否则我会完全忽略 loc.getTime()。

于 2012-06-01T20:54:42.697 回答