Похоже, что mob1lejunkie уже понял это, но только для справки в будущем, позвольте мне упомянуть, что проблема заключается в магнитном склонении (разница между магнитным севером и истинным севером). Вы можете попробовать онлайн-модель от NOAA , чтобы понять, какая разница в вашей части мира.
Android включает модель под названием GeomagnField , которую можно использовать для вычисления приблизительного склонения с учетом широты, долготы и высоты. Итак, я считаю, что вам нужно сделать, чтобы вычислить истинный север, считав значение азимута из Sensor.TYPE_ORIENTATION, а затем добавив к нему GeomagnField.getDeclination ().