Android:如何控制onSensorChange采样率

时间:2011-10-29 21:01:30

标签: android android-sensors sampling magnetometer

我对Android中的传感器读取率感到有些困惑。下面的代码报告延迟~53 ms(ZTE刀片,速率传感器事件设置为SENSOR_DELAY_FASTEST)。

public void onSensorChanged(SensorEvent event) {
 synchronized (this) {
  switch (event.sensor.getType()) { 
   case Sensor.TYPE_MAGNETIC_FIELD:
     TimeNew = event.timestamp;
     delay = (long)((TimeNew - TimeOld)/1000000);
     TimeOld = TimeNew;
     Log.d("Test", delay + " ms");
    break;
    }
   }
  }

日志:

DEBUG/Test(23024): 52 ms
DEBUG/Test(23024): 53 ms
DEBUG/Test(23024): 54 ms
DEBUG/Test(23024): 56 ms
DEBUG/Test(23024): 52 ms
DEBUG/Test(23024): 52 ms
DEBUG/Test(23024): 55 ms
DEBUG/Test(23024): 52 ms

如果我们想平均说出100个样本,然后保存数据,那么每100个样本之间的时间差异很大。这可能是因为传感器值在常规时间段内没有变化。

但我错过了什么吗?有没有办法获得(更多)常规测量(例如100毫秒)?或者我应该在特定的时间段内进行平均而不是没有样品?

50ms也似乎有点长。这可能是设备的硬件限制吗?这个数字在不同平台上会有所不同吗?

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

我会平均一段时间而不是一些样本。如果你采用基于数字的方法,我会期望具有不同设备功能的不同设备会产生截然不同的结果。如果您想更频繁地管理采样,我可能会将测试与事件断开连接,只需按照您希望的频率轮询设备。