Android传感器时间戳参考时间

8
我正在从SensorEvent数据中读取时间戳值,但我无法确定这些值的参考时间。Android文档仅表示:“事件发生时的纳秒时间”。例如:
我当前的Android设备日期是2011年10月14日23:29:56.421(GMT + 2)
System.currentTimeMillis * 1000000(纳秒)= 1318627796431000000(没问题)
sensorevent.timestamp(纳秒)= 67578436328000 = 19小时46分???
请问您能帮助我吗?
谢谢。

请查看此处:https://dev59.com/snA75IYBdhLWcg3wDUi2 - goto10
2个回答

4

1
感谢goto10和manu3d,最终的答案是时间戳时间是设备启动时间(以纳秒为单位)。 - Pablo A. Martínez
3
并非总是这样。在我的 Nexus 4 上,它是自纪元(1970 年开始)以来的纳秒数。或许可以通过假设 SensorEvent 将会被快速处理,并将其与正常运行时间和 1970 年初进行测试来推断出来。 - rbncrthms

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);
    ...
}

我认为这适用于应用程序,毫秒级时间误差是可以接受的。请留下您的想法。


SystemClock.elapsedRealtimeNanos() 是你要找的 API,设备本地时间参考中的 sensorTimeStamp = System.currentTimeMillis() + ((event.timestamp-SystemClock.elapsedRealtimeNanos())/1000000L); - Pablo A. Martínez
您是否发现mUptimeMillis在单次启动中随时间而变化?您在atComponentsStartUp中使用了哪个函数? - Dzung Nguyen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接