2011-05-12 9 views
6

Estoy trabajando en una aplicación tipo brújula simple para Android, probando en Xoom WiFi. La precisión de las lecturas del acelerómetro siempre es SensorManager.SENSOR_STATUS_UNRELIABLE. Las lecturas del campo magnético son siempre de precisión SensorManager.SENSOR_STATUS_ACCURACY_HIGH. ¿Podría ser un error en el Xoom, o hay un problema en mi código?La precisión del acelerómetro Android Xoom es siempre poco confiable

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

Respuesta

2

El Nexus S tiene este problema también (con el giroscopio), y parece que se debe a un escritor controlador perezoso que se olvidó de establecer el campo exactitud de la lectura;)

Mientras los datos estén bien, esto debería ser puramente estético.

1

No sé si usted está teniendo problemas con la precisión de la brújula, pero sé que lo hice cuando utilicé

magSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) 

Le recomiendo usar algo más parecido a lo siguiente.

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

He descubierto que cuando he usado el sensor de campo magnético, en lugar del sensor de orientación, funcionó bastante bien en mi teléfono (Droid Incredible), pero wen todo tipo de locura en el teléfono de mi esposa (Droid Pro) , y el teléfono de mi compañero de trabajo (Samsung Galaxy Tab). Por lo tanto, podría considerar cambiar su sensor, solo por problemas de compatibilidad de dispositivos. :-)

Cuestiones relacionadas