Я немного смущен тем, что вы спрашиваете. Вы хотите положить устройство в карман и ходить, и делать заговор везде, где вы ходили? Или вы хотите помахать устройством в руке, как 3D-мышью, для рисования?
Что касается последнего, см. Предложение Али выше. Если вы хотите заняться отслеживанием движения, вот что я могу вам сказать:
Вы можете легко использовать акселерометр (или гравитационный, если он есть) и магнитометр в сочетании с SensorManager.getRotationMatrix()
, чтобы узнать, в каком направлении обращено устройство.
На самом деле датчик ВРАЩЕНИЯ делает все это за вас. Вам просто нужно достаточно математики, чтобы преобразовать кватернион в матрицу преобразования; это довольно легко.
(Если вы пытаетесь реализовать гироскопическую мышь, вы можете не читать здесь.)
Затем вы можете использовать датчик линейного ускорения, чтобы определить направление движения устройства. Это будет что-то вроде инерциальной навигационной системы для бедняков. Но это предполагает, что устройство неподвижно, когда вы запускаете приложение, и что датчики действительно достаточно точны, чтобы делать то, что вы хотите.
Ускорение даст вам вектор в координатах устройства. Умножьте этот вектор на матрицу, которую вы получили от датчика ROTATION или SensorManager.getRotationMatrix(), чтобы получить вектор ускорения в мировых координатах. Затем интегрируйте этот вектор с течением времени, чтобы получить вектор скорости, а затем интегрируйте этот вектор с течением времени, чтобы получить расстояние и направление перемещения с момента запуска приложения.
Ошибки будут быстро накапливаться. Этот алгоритм, вероятно, хорош в лучшем случае в течение нескольких минут, прежде чем он начнет возвращать полную ерунду. Вы можете настроить приложение так, чтобы оно определяло, когда устройство больше не движется, и использовать эту возможность для сброса вектора скорости на ноль.
Честно говоря, решить эту проблему очень и очень сложно. Там, вероятно, есть докторская степень или, по крайней мере, пара статей для вас, если вы решите это. Выполните поиск по термину «внутренняя навигация», чтобы получить дополнительные ссылки.
Но имейте в виду, что без какой-либо службы определения местоположения (сети или GPS) невозможно быть уверенным, в каком направлении движется устройство или где оно находится.
Насколько я понимаю, все существующие алгоритмы внутренней навигации зависят от получения случайных GPS-фиксаций, или от знания схемы внутреннего пространства, по которому перемещаются, и использования ее для подсказок, или от знания местоположения ближайших передатчиков WiFi и использования их уровней сигнала для генерации. исправления.
Серьезно, если вы не говорите здесь об очень малых расстояниях, GPS — ваш лучший выбор.
person
Edward Falk
schedule
26.11.2014