0

コードを実行すると、加速度計から返される値はランダムに見えます。デバイスを手に取って回転させても、値に劇的な変化は見られず、デバイスが変化したことを示す明らかな兆候も見られません。静止位置から移動位置へ。コードは 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)
  {
  }
}
4

2 に答える 2

1

ドキュメントから解決策に対処するときは、理解してください。
gravityローパスフィルターの状態を保存する必要があるため、クラスのフィールドである必要があります。 加速度計の平均gravity値を保持します。速い変化は線形加速度です。

于 2013-02-19T08:55:45.763 に答える