gpt4 book ai didi

Android SensorEvent 时间戳常量

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:12 25 4
gpt4 key购买 nike

我目前正在编写一个简单的 android 应用程序来计算设备 imu 的偏差。在执行此操作时,我遇到了 event.timestamp 值的问题

使用代码:

float dT = (event.timestamp-accel_timestamp)*NS2S;

来自 Android Reference Guide 的示例从四元数计算旋转矩阵。

当我使用 Galaxy Nexus-S 运行代码时,测量之间的 dT 为 0.06~0.07 秒,但是当我在 LG Nexus 4 或 Nexus 7 上运行相同代码时,dT 始终为 0。我知道的问题,Android SensorEvent timestamp issue Nexus 7 时间戳是 unix 时间戳,但连续测量之间的差异不应始终为零。 Nexus 4 和 Nexus 7 都具有相同的 IMU,这可能是如何从 IMU 创建时间戳的错误吗?

最佳答案

哇,好吧,这肯定是个错误!

每个 SensorEvent 的时间戳都被覆盖,就好像它是一个静态变量一样......

当我记录事件发生时的时间戳的字符串时,所有的值都是不同的。

事件以不变的方式存储在数组中。

数组中的每个 SensorEvent 现在都有相同的时间戳,但值数组仍然不同(即,它们不是同一个对象并且包含不同的信息......除了时间戳)。

Google/HTC,请还我生命中的 3 小时!

除非有人能解释这种行为,否则我会提交错误报告。 API 中肯定没有记录.

与此同时,尝试这个解决方案:

import android.hardware.Sensor;
import android.hardware.SensorEvent;

public class UnbrokenSensorEvent {
public long timestamp;
public float[] values;
public Sensor sensor;

public UnbrokenSensorEvent(SensorEvent event){
this.timestamp = event.timestamp;
this.values = event.values;
this.sensor = event.sensor;
}
}

然后在你的监听器中做这样的事情:

ArrayList<UnbrokenSensorEvent> results = new ArrayList<UnbrokenSensorEvent>();

public void onSensorChanged(SensorEvent event) {
results.add(new UnbrokenSensorEvent(event));
}

重构应该很容易,因为 SensorEvent 和 UnbrokenSensorEvent 具有相同的公共(public)字段。如果您需要使用其他 SensorEvent 功能,只需将其放入 Unbroken 版本即可。

这很 hacky,但恕我直言,快速 hack 总比等待 API 更新好!

关于Android SensorEvent 时间戳常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14842537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com