【问题标题】:How do I get subsequent timestamps accurate upto 5 micro seconds in android如何在android中获得精确到5微秒的后续时间戳
【发布时间】: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);
 }

我在OnSensorChangedSensorEvent事件)函数中要求后续系统时间戳值的差异传感器启动。

 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


【解决方案1】:

根据您可能要求的 cmets:

public void onSensorChanged(SensorEvent event) {
  long systemTimeStamp= SystemClock.elapsedRealtimeNanos();
  double timeDifference = ((double) (systemTimeStamp - prevTime)) / 1000000d;    //msec        
  Log.e("No PROBLEM",timeDifference);
  prevTime=systemTimeStamp;
}

【讨论】:

    【解决方案2】:

    传感器事件是批处理的。您可以使用 event.timestamp 代替 SystemClock.elapsedRealtimeNanos()。

    见: https://source.android.com/devices/sensors/batching.html

    【讨论】:

    • 我需要系统时间戳而不是传感器时间戳来通过 event.timestamp 检查传感器报告值的准确性。
    猜你喜欢
    • 2014-09-20
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多