2011-05-12 11 views
6

Sto lavorando a una semplice applicazione di tipo bussola per Android, test su Xoom WiFi. La precisione delle letture dell'accelerometro è sempre SensorManager.SENSOR_STATUS_UNRELIABLE. Le letture del campo magnetico sono sempre accurate SensorManager.SENSOR_STATUS_ACCURACY_HIGH. Potrebbe essere un bug nello Xoom, o c'è un problema nel mio codice?L'accuratezza dell'accelerometro Android Xoom è sempre inaffidabile

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

risposta

2

Il Nexus S ha anche questo problema (con il giroscopio), e sembra che sia a causa di uno scrittore pilota pigro che ha dimenticato di impostare il campo accuratezza dei la lettura;)

Finché i dati vanno bene, questo dovrebbe essere puramente estetico.

1

Non so se si hanno problemi con la precisione della bussola, ma so che ho fatto quando ho usato

magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) 

Mi consiglia di utilizzare qualcosa di più simile alla seguente.

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

ho scoperto che quando ho usato il sensore di campo magnetico, piuttosto che il sensore di orientamento, ha funzionato abbastanza bene sul mio cellulare (Droid incredibile), ma wen ogni sorta di folle sul telefono di mia moglie (Droid Pro) e il telefono del mio collega (Samsung Galaxy Tab). Quindi potresti prendere in considerazione la possibilità di cambiare il sensore, solo per problemi di compatibilità del dispositivo. :-)

Problemi correlati