Пример компаса для Android

Я ищу пример компаса для Android. Все, что мне нужно сделать, это получить правильный подшипник (в портретном и альбомном режимах).

Я уже нашел несколько образцов, некоторые используют только Sensor.TYPE_ORIENTATION, некоторые используют комбинацию Sensor.TYPE_ACCELEROMETER и Sensor.TYPE_MAGNETIC_FIELD.

Каков правильный и распространенный способ получить опору для того, чтобы сказать Android 1.6 - 4.0?

Ответ 1

Sensor.TYPE_ORIENTATION устарел.

В документации указано, что вы должны использовать SensorManager.getOrientation().

Итак, вы должны читать от Sensor.TYPE_ACCELEROMETER, а также от Sensor.TYPE_MAGNETIC_FIELD, а затем вызвать SensorManager.getRotationMatrix() и, наконец, SensorManager.getOrientation(), который вернет вам ориентацию телефона.

Оттуда, если вы видите эту диаграмму, тривиально получить ориентацию телефона. Вероятно, это ваш второй пример, но я не знаю, потому что вы не показали мне, что это такое.

Ответ 2

Спасибо Dan за образец кода.

Но есть только небольшая коррекция: измените event.values на event.values.clone() в соответствии с этим обсуждение.
Это работает для меня сейчас после этой модификации.

Ответ 3

Использование комбинации методов Sensor.TYPE_ACCELEROMETER и Sensor.TYPE_MAGNETIC_FIELD и SensorManager.getOrientation() не дает мне точных значений. Устаревший метод Sensor.TYPE_ORIENTATION работает хорошо.:)