2011-10-14 48 views
5

我正在讀取來自SensorEvent數據的時間戳值,但我無法計算出這些值的參考時間。 Android文檔只是說: 「在納秒級的時間在事件發生的時間」 作爲一個例子:Android傳感器時間戳參考時間

我現在的Android設備日,2011年10月14日23:29:56.421(GMT + 2)

System.currentTimeMillis的* 1000000(nanosec)= 1318627796431000000(沒關係)

sensorevent.timestamp(nanosec)= 67578436328000 = 19小時46分鐘????

可以幫我嗎?

感謝

+0

請參閱:http://stackoverflow.com/questions/3498006/sensorevent-timestamp-to-absolute-utc-timestamp – goto10

回答

3

看來,你面對的是什麼納秒數,因爲操作系統的啓動,也被稱爲「正常運行」。

在這個問題上進一步信息:http://code.google.com/p/android/issues/detail?id=7981

我要補充的是,鏈接的問題SensorEvent.timestamp to absolute (utc) timestamp?涉及的是同樣的問題,在這裏我找到了答案。

+1

感謝goto10和manu3d,最後答案是時間戳時間是設備的運行時間,以納秒爲單位。 –

+2

並不總是如此。在我的Nexus 4上,自1970年代初以來,這個時間爲納秒。也許可以通過假設SensorEvent將被快速處理並根據正常運行時間和1970年開始進行測試來推斷。 – davtom

1

我知道,這是一個非常古老的問題,但是,我也掙扎轉換SensorEvent.timestamp到人類可讀的時間。所以我在這裏寫下我迄今爲止所瞭解的內容,以及我如何轉換它以便從你們那裏獲得更好的解決方案。任何意見將受到歡迎。

我的理解,SensorEvent.timestamp是因爲設備的開機經過時間。所以我必須知道設備的正常運行時間。所以如果有一個API返回設備的啓動,這將是非常容易的,但是,我還沒有找到它。 因此,我使用SystemClock.elapsedRealtime()System.currentTimeMillis()來「估算」設備的正常運行時間。這是我的代碼。

private long mUptimeMillis; // member variable of the activity or service 
... 
atComponentsStartUp...() { 
    ... 
    /* Call elapsedRealtime() and currentTimeMillis() in a row 
     in order to minimize the time gap */ 
    long elapsedRealtime = SystemClock.elapsedRealtime(); 
    long currentTimeMillis = System.currentTimeMillis(); 

    /* Get an uptime. It assume that elapsedRealtime() and 
     currentTimeMillis() are called at the exact same time. 
     Actually they don't, but, ignore the gap 
     because it is not a significant value. 
     (On my device, it's less than 1 ms) */ 
    mUptimeMillis = (currentTimeMillis - elapsedRealtime); 
    .... 
} 
... 
public void onSensorChanged(SensorEvent event) { 
    ... 
    eventTimeMillis = ((event.timestamp/1000000) + mUptimeMillis); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(eventTimeMillis); 
    ... 
} 

我認爲這適用於毫秒時間錯誤爲okey的應用程序。請留下您的想法。

+0

SystemClock.elapsedRealtimeNanos()是您正在查找的API, sensorTimeStamp in device's local time reference = System .currentTimeMillis()+((event.timestamp-SystemClock.elapsedRealtimeNanos())/ 1000000L); –

+0

您是否發現mUptimeMillis隨時間而改變(在單次啓動時)? atComponentsStartUp使用了哪個函數? –