onSensorChanged()的频率很奇怪(太快)?

时间:2014-05-21 07:03:26

标签: java android android-sensors

当我使用onSensorChanged()测试我的手机加速度计时,发现它对快速响应。几乎每1~3ms onSensorChanged()将被激活。我搜索其他一些手机的信息,感觉它有点奇怪,所以我怀疑我的代码可能是错的。这是我的代码的一部分:

   public void onSensorChanged(SensorEvent se_a) { /* 取得x,y,z加速度值 */
    xa = se_a.values[0];
    ya = se_a.values[1];
    za = se_a.values[2];

    final String timeStamp_a = new SimpleDateFormat("HHmmssSSS",
             Locale.UK).format(new Date());

    String tmp_a = "0 " + timeStamp_a + " " + String.valueOf(xa)
    + " " + String.valueOf(ya) + " " + String.valueOf(za) + "\n";

部分结果如下:

0 160106203 9.5385 -0.6895301 1.1109096
0 160106204 9.500193 -0.5746084 1.1109096
0 160106206 9.576807 -0.5746084 1.1875241
0 160106207 9.461885 -0.6895301 1.3024458

我的手机是LG G2。我将加速度计设置为SENSOR_DELAY_FASTEST。但是在谷歌播放中使用一些应用来测试我的加速度计,它表明在SENSOR_DELAY_FASTEST中频率是120Hz,所以很快发现onSensorChanged()响应如此之快(1~3ms)是非常奇怪的。我的代码在哪里可能出错?请帮帮我!

1 个答案:

答案 0 :(得分:1)

如果要使用SENSOR_DELAY_FASTEST加快更新速度,您可以设置另一个符合您需求的标记。

请参阅docs了解您可以使用的不同费率:

  

默认数据延迟(SENSOR_DELAY_NORMAL)适合   监控典型的屏幕方向变化并使用延迟    200,000微秒。您可以指定其他数据延迟,例如SENSOR_DELAY_GAME( 20,000微秒延迟),SENSOR_DELAY_UI   ( 60,000微秒延迟)或SENSOR_DELAY_FASTEST( 0   微秒 !!!!延迟)。从Android 3.0(API Level 11)开始,您可以   还将延迟指定为绝对值(以微秒为单位)。

编辑:看看这个方法SensorManager.registerListener(SensorEventListener, Sensor, int),如果没有标志支持您的需求,您可以在其中指定延迟(ms)。从API 9开始提供此功能。如果您需要特定的频率,请将其作为参数提供。