Невозможно точно определить движение устройства, используя только акселерометр и гироскоп.
Поскольку акселерометр обеспечивает ускорения, т. Е. 2-й вывод времени, вам нужно интегрировать дважды. Хотя датчики довольно точны, это приводит к огромным ошибкам через несколько циклов из-за распространения ошибок. Пока не существует фиксированной контрольной точки для повторной калибровки расчетов, даже тяжелая математика, такая как фильтры Калмана, не дает приемлемого результата.
Если пользователь бежит, а не идет, вы получаете немного другую ситуацию из-за более сильных движений вверх и вниз, которые можно использовать как шагомер. Я не знаю, удалось ли кому-нибудь заставить это работать, но мне кажется, что это в принципе возможно, особенно в сочетании с GPS. Даже в этом случае остаются некоторые проблемы, такие как режим ожидания или прерывания по телефону, толкающие ваше приложение в фоновом режиме.