【发布时间】:2016-02-22 14:54:24
【问题描述】:
下面是我正在使用的示例代码:
private final SensorManager mSensorManager;
private final Sensor mAccelerometer;
private long prevTime=0;
public SensorActivity() {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_FASTEST);
}
我在OnSensorChanged(SensorEvent事件)函数中要求后续系统时间戳值的差异传感器启动。
public void onSensorChanged(SensorEvent event) {
long systemTimeStamp= SystemClock.elapsedRealtimeNanos();
long timeDifference = (systemTimeStamp - prevTime) / 1000000; //msec
Log.e("PROBLEM",timeDifference);
prevTime=systemTimeStamp;
}
在 SENSOR_DELAY_FASTEST 时,上述差异多次变为 0 //为什么??
后续时间戳的差异报告为0,但根据定义它应该以纳秒为单位报告时间,因此在5微秒时差异不应为零。 我怎样才能获得非零差异,或者有没有其他方法可以获得 5 微秒精度的系统时间戳差异。
请注意,event.timestamp 报告传感器的时间戳,但我需要 OnSensorChanged(SensorEvent event) 中的系统时间戳,以通过与实际系统时间戳进行比较来测量传感器时间戳的准确度。
【问题讨论】:
-
您是说两个连续回调的 systemTimeStamp 有时是相同的吗?我确信这就是您所说的,因为当您除以 1000,000 并且差异小于 1 毫秒时,timeDefference 可能会变为 0,但只是想确定一下。
-
是的,这是我的问题..这个问题有解决方案吗..?
-
让我再试一次,因为我不确定哪个是问题所在。您正在记录 timeDifference 的值。那个是0吗?如果是这样,这就是以纳秒为单位的值之间的实际差异小于 1000000 纳秒时的预期结果。
-
所以如果这是预期的,是否有任何解决方法。
-
我真的很困惑。你到底期望结果是什么?当您使用“long”时,结果是一个整数,例如 0, 1, ... 您希望 1000 除以 1000,000 的结果不是 0 吗?或者,也许你想得到一小部分?在这种情况下,请使用 float 或 double。
标签: android timestamp delay android-sensors sensormanager