Если у вас есть доступ к акселерометру, вы можете использовать метод getOrientation(), который возвращает азимут, тангаж и крен, определенные двумя датчиками и рассчитанные с помощью getRotationMatrix()< /а> метод.
РЕДАКТИРОВАНИЕ
Ответ на комментарии... Теперь я вижу ваш вопрос. Прости. С помощью всего лишь 3-осевого магнитометра вы не сможете точно определить азимут, тангаж и крен, за исключением случаев, когда устройство параллельно поверхности земли. Помните, вы использовали игольчатый компас, и он был либо а) на шпинделе, чтобы вы могли видеть и вручную компенсировать наклон, либо б) запечатан в жидкости, чтобы вы могли установить пузырьковый уровень в центр? Чтобы получить азимут:
azimuth = arctan(y/x)
Теперь, если вы наклоните телефон, ошибки в восприятии плоскости x/y могут стать большими. Теперь вам нужно выяснить наклон (с помощью акселерометра), затем измерить магнитную силу по оси Z, а затем использовать три для компенсации. По сути, это то, что вы знаете как getRotationMatrix() и getOrientation().
Одна из причин, по которой я думаю, что Sensor.TYPE_ORIENTATION устарела в API 8, заключалась в том, что не существует отдельного датчика ориентации как такового. Это комбинация измерения магнитного поля и ускорения.
Хорошая статья, которую я выкопал, которая охватывает все это:
http://www.ssec.honeywell.com/position-sensors/datasheets/sae.pdf
person
mchang
schedule
28.11.2010