Android传感器时间戳参考时间
我正在从SensorEvent数据中读取时间戳值,但我无法计算出这些值的参考时间。Android文档只是以“事件发生的纳秒时间”为例: 我当前的Android设备日期,2011年10月14日23:29:56.421(GMT+2) System.currentTimeMillis*1000000(纳秒)=1318627796431000000(没问题) sensorevent.timestamp(纳秒)=67578436328000=19小时46分钟 你能帮我吗Android传感器时间戳参考时间,android,timestamp,sensors,Android,Timestamp,Sensors,我正在从SensorEvent数据中读取时间戳值,但我无法计算出这些值的参考时间。Android文档只是以“事件发生的纳秒时间”为例: 我当前的Android设备日期,2011年10月14日23:29:56.421(GMT+2) System.currentTimeMillis*1000000(纳秒)=1318627796431000000(没问题) sensorevent.timestamp(纳秒)=67578436328000=19小时46分钟 你能帮我吗 谢谢看来您要处理的是操作系统启动后
谢谢看来您要处理的是操作系统启动后的纳秒数,也称为“正常运行时间” 有关该问题的进一步信息:
我应该补充一点,链接的问题涉及相同的问题,也是我找到答案的地方。我知道这是一个非常古老的问题,但我也在努力将
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);
...
}
我认为这适用于毫秒级错误的应用程序。请留下您的想法。请看这里:谢谢goto10和manu3d,最后的答案是时间戳时间是设备在nanosecs中的正常运行时间。它并不总是这样。在我的Nexus4上,从新纪元(1970年开始)到现在已经是纳秒了。也许可以通过假设SensorEvent将被快速处理并根据正常运行时间和1970年开始对其进行测试来推断。SystemClock.ElapsedRealTimeNano()是您正在寻找的API,设备的本地时间引用中的sensorTimeStamp=System.currentTimeMillis()+((event.timestamp SystemClock.ElapsedRealTimeNano())/100万毫升);你有没有发现mUptimeMillis会随着时间的推移而改变(在一只靴子里)?您在AtComponents启动时使用了哪个函数?