2016-03-16 4 views
0

мне нужно получить ориентацию устройства (шаг, чтобы быть конкретным), Я использую метод, который включает реализацию SensorEventListener акселерометр и магнитометрПолучение шаг от устройств, которые не имеют магнитометр

Проблема некоторых У устройств нет магнитометра (я наткнулся на Samsung J7 и J5, но при условии, что их больше), все другие устройства, которые я тестировал, работают как шарм. теперь я знаю, что у этих устройств нет магнитометра, поэтому я попытался зарегистрировать устаревшее событие «TYPE_ORIENTATION» и событие «TYPE_ROTATION_VECTOR», но никто не работает.

Все, что я нахожу на этих устройствах, - это событие от акселерометра.

Я знаю, что это возможно, потому что я скачал приложение пузырькового уровня на этих телефонах, и они работают (компас доцент) Благодаря

Edit: мне нужно прокручивать вид, наклоняя телефон, так что мне нужно калибровать один раз и знать, если шаг больше или меньше, чем начальная калибровка

+0

Вы можете использовать гироскоп для изменения высоты тона. Он не сможет дать абсолютное, но может дать вам относительный. –

+0

Не могли бы вы пролить свет? привести пример кода? Я не нашел –

ответ

1

Чтобы получить вектор гравитации, вам необходимо использовать акселерометр фильтра нижних частот.

float[] gravity = low pass filter accelerometer 

Вычислить норму тяжести

float gravityNorm = calculate the norm of gravity. 

Тогда шаг будет

(float) Math.asin(-gravity[1]/gravityNorm)) 

Для приведенной выше формуле прочитать документ для TYPE_PITCH в классе DSensor в моем проекте DSensor в https://github.com/hoananguyen/dsensor

+0

Спасибо! Я проверю и вернусь к вам –