2012-05-27 291 views
3

我刚刚意识到,在android上,从GPS位置更新获得的时间戳以ms为单位,而传感器事件更新的时间戳(例如加速度计)的启动时间为ns。Android:GPS时间戳与SensorEvent时间戳

我想将GPS时​​间戳转换为SensorEvent时间戳的格式,有没有人知道一个很好的方法来做到这一点?

我尝试以下: 予测一次系统启动时的时间,因为历元:

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

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

timestamp = loc.getTime() - startupTime; 

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

回答

0

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

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

2

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

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()