如何在android

时间:2015-11-20 07:36:04

标签: android timestamp delay android-sensors sensormanager

以下是我正在使用的示例代码:

 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事件)中的系统时间戳,以通过与实际系统时间戳进行比较来测量传感器时间戳的准确度。

2 个答案:

答案 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;
}