0

当我运行我的代码时,加速度计返回的值似乎是随机的,即使我拿起设备并旋转它,值似乎也没有任何显着变化或设备已经改变的明显迹象从静止位置到移动位置。我从谷歌的网站上复制了代码。基本上我想看看设备是否已经从静止位置移动了。如果可能,解决方案应该适用于 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)
  {
  }
}
4

2 回答 2

1

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

于 2013-02-19T08:55:45.763 回答
0
  1. 你试过Sensor.TYPE_LINEAR_ACCELERATION吗?该传感器返回不包括重力的加速度力,您无需计算
  2. 传感器太敏感,噪音很大。获得 0,0,0 值几乎是不可能的。您需要排除较小的值。
于 2016-08-03T23:55:38.953 回答