以下是我正在使用的示例代码:
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事件)中的系统时间戳,以通过与实际系统时间戳进行比较来测量传感器时间戳的准确度。
答案 0 :(得分:0)
传感器事件已批处理。您可以使用event.timestamp而不是SystemClock.elapsedRealtimeNanos()。
请参阅: https://source.android.com/devices/sensors/batching.html
答案 1 :(得分:0)
根据您可能要求的评论:
public void onSensorChanged(SensorEvent event) {
long systemTimeStamp= SystemClock.elapsedRealtimeNanos();
double timeDifference = ((double) (systemTimeStamp - prevTime)) / 1000000d; //msec
Log.e("No PROBLEM",timeDifference);
prevTime=systemTimeStamp;
}