Android:GPS时间戳与SensorEvent时间戳

时间:2012-05-27 11:09:47

标签: android gps timestamp sensor

我刚刚意识到,在Android上,你从GPS位置更新获得的时间戳是从纪元开始的ms,而SensorEvent更新的时间戳(例如加速度计)是自启动以来的ns。

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

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

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

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

timestamp = loc.getTime() - startupTime;

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

3 个答案:

答案 0 :(得分:2)

请勿使用SystemClock.uptimeMillis(),因为它会在没有设备处于睡眠模式的时间内测量自启动以来的时间。而是使用SystemClock.elapsedRealtime()

答案 1 :(得分: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()

答案 2 :(得分:0)

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

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