2012-05-27 284 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()