Ответ здесь: http://developer.android.com/reference/android/hardware/SensorEvent.html#values
Цитата:
В частности, сила тяжести всегда влияет на измеряемое ускорение: Ad = -g - ∑F / масса
По этой причине, когда устройство сидит на столе (и, очевидно, не ускоряется), акселерометр считывает величину g = 9,81 м / с ^ 2
Аналогично, когда устройство находится всвободного падения и, следовательно, опасно ускоряющегося к земле со скоростью 9,81 м / с ^ 2, его акселерометр показывает величину 0 м / с ^ 2.
Должно быть очевидно, что для измерения реального ускоренияустройство, вклад силы тяжести должен быть устранен.Это может быть достигнуто путем применения фильтра верхних частот.И наоборот, фильтр низких частот можно использовать для изоляции силы тяжести.
public void onSensorChanged(SensorEvent event)
{
// alpha is calculated as t / (t + dT)
// with t, the low-pass filter's time-constant
// and dT, the event delivery rate
final float alpha = 0.8;
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];
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}