Я довольно подробно изучил эту тему и, возможно, смогу помочь вам указать правильное направление.
Как уже упоминалось, только некоторые телефоны реализовали TYPE_LINEAR_ACCELERATION и TYPE_GRAVITY и обычно оснащены гироскопом. У Droid Razr даже есть гироскоп, но они так и не удосужились реализовать его или TYPE_LINEAR_ACCELERATION. Я полагаю, что в GS2 реализовано TYPE_LINEAR_ACCELERATION, но нет гироскопа, поэтому они, должно быть, использовали магнитный датчик или какой-то фильтр нижних частот. Это может быть неприятно.
На большинстве телефонов с гироскопом есть своего рода слияние между датчиком ускорения и гироскопом (вероятно, дополнительный фильтр для компенсации дрейфа, а затем кватернионы или карданные углы для изоляции гравитации). Эти слияния и фильтры могут быть реализованы по-разному и использовать различное оборудование и т. д. Задержка и точность будут различаться для разных устройств, поэтому TYPE_LINEAR_ACCELERATION не всегда будет давать одинаковые результаты.
Если у вас нет телефона с TYPE_LINEAR_ACCELERATION, вы застряли с TYPE_ACCELERATION, который не может отделить гравитацию (наклон) от линейного ускорения.
Одним из вариантов является применение фильтра нижних частот. Это может работать или не работать в зависимости от вашего приложения. Я написал бесплатное приложение, чтобы помочь разработчикам и другим заинтересованным сторонам изучить вариант фильтра нижних частот.
Другой вариант — просто измерить наклон устройства, когда оно статично, а затем применить это измерение силы тяжести, когда устройство не статично. Если устройство не часто меняет ориентацию, это может быть отличным вариантом, потому что это действительно быстро и просто.
Отличным альтернативным вариантом объединения датчиков является использование магнитного датчика вместо гироскопа. Эта опция будет работать практически на всех устройствах, если магнитное поле не подвержено влиянию искажений жесткого или мягкого железа.
Я реализовал все эти подходы в проекте с открытым исходным кодом Acceleration Explorer.
person
Kaleb
schedule
25.07.2013
acceleration = gravity + linear-acceleration
и не забывайте, что это векторы со знаками! Длина действительно может быть такой, какой вы ее пишете. - person Ali   schedule 29.06.2013