Кажется, гравитация / лин.ускорение может быть рассчитано с помощью фильтра нижних частот - как описано в Android-документации .
Однако только фильтрация последнего значения не сделает этого.Я получаю приемлемые результаты, усредняя значения акселерометра ок.200 мс (для умеренного движения это все равно будет мешать, например, когда вы быстро переворачиваете телефон между пальцами).
Ваш предложенный ответ, скорее всего, правильный.
Вы можете проверить статистикунесколько моделей смартфонов на фрагментация Android .Для многих моделей потребляемая мощность лин.Датчик ускорения и гравитации - это просто сумма акселерометра, гироскопа и магнитометра.
Гироскоп позволяет распознавать быстрые угловые движения и может использоваться для улучшения значения силы тяжести, что невозможно только с помощью фильтра нижних частот.Для магнитометра я не уверен, что он действительно даст вам больше информации.
На моем телефоне (HTC One S) датчик силы тяжести потребляет столько же энергии, сколько акселерометр, но все же лучше, чем мой простой фильтр.Так что это либо другой аппаратный датчик, либо, возможно, они используют разные веса.Я попытался весить в соответствии с данными сильнее, если их абсолютное значение ближе к гравитации, что хорошо, но все же не так хорошо, как фактический датчик гравитации.
По соображениям совместимости, я бы предложил использовать низкийпо возможности, проходной фильтр для гравитации, поскольку еще не у каждого смартфона есть гироскоп или упомянутые датчики.