Android 加速度传感器事件时间戳 您所在的位置:网站首页 时间戳到秒还是毫秒 Android 加速度传感器事件时间戳

Android 加速度传感器事件时间戳

2022-12-06 13:56| 来源: 网络整理| 查看: 265

Android 加速度传感器事件时间戳

android

Android 加速度传感器事件时间戳,android,Android,我目前正在开发一个android应用程序。。我必须记录加速计传感器事件与事件时间的坐标。我得到了传感器事件时间戳,如“3497855005850”,但我无法将事件时间戳转换为用户可读的日期时间格式。提前感谢 如何将SensorEvent时间戳转换为unix时间戳?传感器时间戳实际上是正常运行时间的纳秒,而不是系统时间的纳秒。看 理论上,您可以使用以下方法将传感器时间戳转换为以毫秒为单位的时间: long timeInMillis = (new Date()).getTime()

我目前正在开发一个android应用程序。。我必须记录加速计传感器事件与事件时间的坐标。我得到了传感器事件时间戳,如“3497855005850”,但我无法将事件时间戳转换为用户可读的日期时间格式。提前感谢 如何将SensorEvent时间戳转换为unix时间戳?传感器时间戳实际上是正常运行时间的纳秒,而不是系统时间的纳秒。看 理论上,您可以使用以下方法将传感器时间戳转换为以毫秒为单位的时间: long timeInMillis = (new Date()).getTime() + (sensorEvent.timestamp - System.nanoTime()) / 1000000L; 您甚至可以将(new Date()).getTime()调用与两个System.nanoTime()调用放在一起,并对它们进行平均,以接近实际偏移量 然后您可以将传感器时间格式化为日期和时间。您可以在传感器更改(传感器事件)函数中设置参考时间变量。

当前时间和事件时间的参考。当事件到达时,从事件时间中减去传感器参考时间,就会得到纳秒级的差值。您可以将该差值除以1000000添加到当前时间引用中,以毫秒为单位获取事件时间。 计算一个事件的最大时间为0.5毫秒时出错。您可以通过偶尔更改引用时间来最小化错误

private long sensorTimeReference = 0l; private long myTimeReference = 0l; public void onSensorChanged(SensorEvent event) { // set reference times if(sensorTimeReference == 0l && myTimeReference == 0l) { sensorTimeReference = event.timestamp; myTimeReference = System.currentTimeMillis(); } // set event timestamp to current time in milliseconds event.timestamp = myTimeReference + Math.round((event.timestamp - sensorTimeReference) / 1000000.0); // some code... } 我也有同样的问题,用了埃哈特韦尔的。但是,我使用了System.currentTimeMillis()而不是newdate().getTime() 此外,我还发现sensorEvent.timeStamp和System.nanoTime()的偏移量最大为300毫秒,大部分为 如果我使用Boban S,则初始化时的差异是正确的。但是,正确的时间和测量时间存在分歧。估计的测量时间是在将来。我认为有三种方法可以获得毫秒(Kotlin) 这三种方法都提供了相同的结果,但当我想看到从计算值到当前时间的差异时 val diff = System.currentTimeMillis() - millis 我看到'diff'的值-359704905 Log.d("diff", "" + event.timestamp + " - " + System.nanoTime()) 差异:541695268300000-181990403666592 差异:541695277240000-181990405818592 差异:541695286859000-18199041191592 差异:541695296139000-181990412584592 差异:541695305735000-1819904152592 因此,所有建议的解决方案都不正确 对我来说,这种简单的方式适合我的需要 override fun onSensorChanged(sensorEvent: SensorEvent?) { val millis = System.currentTimeMillis() } 每种设备的性能都有所不同。它可以基于历元、自启动以来的时间和CPU唤醒时间。最好的方法是读取所有三个,然后查看时间戳最接近哪一个,然后根据偏移量进行转换。 “时间戳必须与elapsedRealtimeNano时钟同步” 所以 官方的SensorEvent#timestamp声明: [event.time是]事件发生的时间(以纳秒为单位)。对于给定传感器,每个新传感器事件应使用与SystemClock.elapsedRealtimeNanos()相同的时基单调递增 挑战 一些制造商/设备改用SystemClock.currentTimeNanos()(例如Nexus 4) 独立于设备的解决方案: /** * Calculates the static offset (ms) which needs to * be added to the `event.time` (ns) to get the Unix * timestamp of the event. * * @param eventTimeNanos the {@code SensorEvent.time} to be used to determine the time offset * @return the offset in milliseconds */ private long eventTimeOffset(final long eventTimeNanos) { // Capture timestamps of event reporting time final long elapsedRealTimeMillis = SystemClock.elapsedRealtime(); final long upTimeMillis = SystemClock.uptimeMillis(); final long currentTimeMillis = System.currentTimeMillis(); // Check which timestamp the event.time is closest to the event.time final long eventTimeMillis = eventTimeNanos / 1_000_000L; final long elapsedTimeDiff = elapsedRealTimeMillis - eventTimeMillis; final long upTimeDiff = upTimeMillis - eventTimeMillis; final long currentTimeDiff = currentTimeMillis - eventTimeMillis; // Default case (elapsedRealTime, following the documentation) if (Math.abs(elapsedTimeDiff)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有