2011-05-12 9 views
6

Pracuję nad prostą aplikacją typu kompas dla systemu Android, testując na Xoom WiFi. Dokładność odczytów przyspieszeniomierza zawsze wynosi SensorManager.SENSOR_STATUS_UNRELIABLE. Odczyty pola magnetycznego zawsze mają dokładność SensorManager.SENSOR_STATUS_ACCURACY_HIGH. Czy to może być błąd w Xoom, czy też jest jakiś problem w moim kodzie?Dokładność dokładności przyrządów akcelerometrowych Xoom jest zawsze zawodna

onCreate: 
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); 
accelGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

onResume: 
mSensorManager.registerListener(accelListener, accelGravitySensor, SensorManager.SENSOR_DELAY_NORMAL); 
mSensorManager.registerListener(magListener, magSensor, SensorManager.SENSOR_DELAY_NORMAL); 

private final SensorEventListener accelListener = new SensorEventListener() { 
    public void onSensorChanged(SensorEvent event) { 
    Log.d(TAG, "accel (" + event.values[0] + ", " + event.values[1] + ", " + event.values[2] + ") accuracy=" + accuracyTag(event.accuracy)); 
    } 
    public void onAccuracyChanged(Sensor sensor, int accuracy) {} 
}; 

Odpowiedz

2

Nexus S ma ten problem zbyt (z żyroskopu), i wygląda na to, że to ze względu na leniwe pisarza kierowca, który zapomniał ustawić pole dokładności z czytanie;)

Dopóki dane są w porządku, powinno to być czysto kosmetyczne.

1

nie wiem, jeśli masz problemy z dokładnością kompasu, ale wiem, że wtedy gdy użyłem

magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) 

Gorąco polecam użyciu coś więcej jak poniżej.

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(); 
    } 

Okazało się, że kiedy stosowany czujnik pola magnetycznego zamiast czujnik orientacji, to działało całkiem dobrze na mój telefon (Droid Incredible), ale wen wszelkiego rodzaju szalone na telefon żony (Droid Pro) i telefon mojego współpracownika (karta Samsung Galaxy). Więc możesz rozważyć zmianę czujnika, tylko w przypadku problemów ze zgodnością urządzenia. :-)