如何在 android 中获得精确到 5 微秒的后续时间戳
How do I get subsequent timestamps accurate upto 5 micro seconds in android
下面是我使用的示例代码:
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) 中的系统时间戳,通过与实际系统时间戳进行比较来衡量传感器时间戳的准确性。
传感器事件是批处理的。您可以使用 event.timestamp 而不是 SystemClock.elapsedRealtimeNanos()。
参见:
https://source.android.com/devices/sensors/batching.html
根据您可能要求的评论:
public void onSensorChanged(SensorEvent event) {
long systemTimeStamp= SystemClock.elapsedRealtimeNanos();
double timeDifference = ((double) (systemTimeStamp - prevTime)) / 1000000d; //msec
Log.e("No PROBLEM",timeDifference);
prevTime=systemTimeStamp;
}
下面是我使用的示例代码:
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) 中的系统时间戳,通过与实际系统时间戳进行比较来衡量传感器时间戳的准确性。
传感器事件是批处理的。您可以使用 event.timestamp 而不是 SystemClock.elapsedRealtimeNanos()。
参见: https://source.android.com/devices/sensors/batching.html
根据您可能要求的评论:
public void onSensorChanged(SensorEvent event) {
long systemTimeStamp= SystemClock.elapsedRealtimeNanos();
double timeDifference = ((double) (systemTimeStamp - prevTime)) / 1000000d; //msec
Log.e("No PROBLEM",timeDifference);
prevTime=systemTimeStamp;
}