Я не знаю, есть ли у вас проблемы с точностью компаса, но я знаю, что имел, когда использовал
magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
Я настоятельно рекомендую использовать что-то похожее на следующее.
mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
if(mySensors.size() > 0){
mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_NORMAL);
sersorrunning = true;
Toast.makeText(this, "Start ORIENTATION Sensor", Toast.LENGTH_LONG).show();
}
Я обнаружил, что когда я использовал датчик магнитного поля, а не датчик ориентации, он довольно хорошо работал на моем телефоне (Droid Incredible), но вызывал всевозможные сумасшествия на телефоне моей жены (Droid Pro) и моего коллеги телефон (Samsung Galaxy Tab). Таким образом, вы могли бы рассмотреть вопрос о замене вашего датчика, просто для проблем совместимости устройства. : -)