Несмотря на то, что автор ответил на свой собственный вопрос, я должен здесь вмешаться, чтобы подчеркнуть почти полную бесполезность любого вида функций компаса на платформе Android.
Я пришел к выводу, что любой, кто зависит от приложения Android-компаса, напрашивается на неприятности, ни один из них не работает надежно, и это не вина разработчика.
Google и MFG просто не предоставили способ получить достоверную точность от этих устройств или даже определить, является ли достоверность достоверной, что еще хуже, потому что иногда это так, а часто нет, и если кто-то доверяет этим устройствам для реального ориентирования Бог поможет им.
Причина, по которой автор, вероятно, думает, что он получает лучшие результаты, заключается в том, что они используют довольно хороший шумовой фильтр на устаревшем датчике ориентации (почему они не могли сделать это на более новом методе, вне моего понимания) и в ограниченном тестировании на одном устройство после калибровки будет работать, но в полевых условиях с использованием многих устройств я обнаружил, что по большей части надежность всегда под вопросом.
Во-первых, шум, создаваемый магнитными датчиками и датчиками ориентации, ужасен, да, это можно преодолеть с помощью правильных технологий DSP, а с телефонами с 2.3 и гироскопом это улучшится в целом, но позор Google и Mfg за то, что они тратят так много Время разработки с некачественной реализацией аппаратных и программных выходов.
Во-вторых, я протестировал по меньшей мере 18 телефонов с надлежащей фильтрацией DSP, и хотя это устраняет шум, это не помогает с точностью, даже у одной и той же модели телефонов разные выходы (хотя некоторые модели кажутся лучше, чем другие)
В-третьих, у вас мало способов определить, откалиброваны ли датчики, даже движение спастической фигуры 8 может или не может откалибровать телефон, и пользователь никогда не узнает, работает он или нет, если у вас нет компаса для проверить, какой тип поражений не так ли?
ПРИМЕЧАНИЕ: вы можете умножить и суммировать магнитные датчики друг с другом и взять квадратный корень из этого sqrt (x * x + y * y + z * z) и убедиться, что это между 25 и 65 или около того, это один индикатор, который вы можете использовать для обнаружения аномальных полей, но он не совсем надежен, лучше, чем ничего, я думаю.
В-четвертых, многие телефоны абсолютно ненадежны, откалиброваны или нет, что не ограничивается типами моделей, но, возможно, плохим QA со стороны mfg, я действительно не знаю почему, но я могу сказать, что 3 HTC ARIA производились дико разные результаты (один на 30 градусов, другой на 50, а третий почти на месте) то же самое с невероятным, связующим звеном и т. д.
Я протестировал 18 телефонов, и многие из них были достаточно близки к точному, ЕСЛИ вы могли правильно откалибровать, но многие из них потребовали 2-10 попыток (мы проверяли после каждой попытки калибровки с помощью высокоточного компаса), и более чем несколько раз они это делали просто НЕ откалибровать вообще.
ПРИМЕЧАНИЕ: вы должны учитывать склонение для истинного смещения на север, что вы можете сделать с помощью API в Android, если у вас есть доступ к текущим GPS-координатам, высоте, времени суток и т. Д., Проблема НЕ была склонением и если вы сравниваете с компасом, это не проблема, так как на него также влияют местные магнитные поля.
С другой стороны, при холодных запусках всегда требуется шаг калибровки на каждом тестируемом нами телефоне, который включает в себя X, невероятный, Aria, Nexus и Thunderbolt. Другими словами, при первом запуске прослушивания датчика в 95% случаев потребуется этап калибровки (даже если сломанные часы работают два раза в день), поэтому, если вы настаиваете на добавлении этой функции, я просто скажу вашему пользователю сделать это в начало каждого события слушателя.
Если вы оставляете датчики работающими (плохо для батареи), то вам может потребоваться или не потребоваться повторная калибровка в зависимости от полей, с которыми он встречается), вышеуказанный метод работает хорошо для этого.
Суть в том, что когда они работают, они кажутся крутыми, но вы НИКОГДА не можете быть уверены в точности азимута, что делает их довольно ненадежными и бесполезными для любой реальной работы.
Лично я бы использовал подшипник GPS во время движения и затем метод вектора вращения, если это возможно, он мог бы быть не идеальным, но это было бы чертовски лучше, чем дерьмовая реализация, которую вы используете в текущей линейке телефонов для азимут.
Извините за длинный перебитый ответ, но я потратил почти месяц на попытки заставить его работать с помощью опытного инженера DSP, и мы довольно много написали о платформе Android как полезной в этом отношении.
A "Иногда это работает, а иногда нет, вы никогда не можете быть уверены, если у вас нет настоящего компаса", на мой взгляд, в каждом приложении компаса должна быть оговорка.