当设备处于静止状态时,加速度计会给出随机值

时间:2013-02-19 08:27:33

标签: android accelerometer

当我运行我的代码时,加速度计返回的值似乎是随机的,即使我拿起设备并旋转它,似乎没有任何显着的值变化或明显的迹象表明设备已从静止位置更改为移动位置。我从Google的网站上复制了代码。基本上我试图看看设备是否已经从静止位置移动了。如果可能,解决方案应该适用于Android 2.2及更高版本:

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);

float[] gravity = new float[3];

@Override
public void onSensorChanged(SensorEvent event)
{
  try
  {
    final float alpha = 0.8f;
    float[] linear_acceleration = new float[3];

    // Isolate the force of gravity with the low-pass filter.
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

    // Remove the gravity contribution with the high-pass filter.
    linear_acceleration[0] = event.values[0] - gravity[0];
    linear_acceleration[1] = event.values[1] - gravity[1];
    linear_acceleration[2] = event.values[2] - gravity[2];
  }
  catch (Exception ex)
  {
  }
}

2 个答案:

答案 0 :(得分:1)

当您从documentation处理解决方案时,请理解这一点 gravity必须是该类的一个字段,因为您需要低通滤波器的存储状态。 gravity保存加速度计的平均值,快速变化是您的线性加速度。

答案 1 :(得分:0)

  1. 你试过Sensor.TYPE_LINEAR_ACCELERATION吗?这个传感器 返回加速力,不包括重力,你不需要 算一算
  2. 传感器过于敏感,噪音很大。获得0,0,0值几乎是不可能的。您需要排除小值。