2010-12-03 9 views
6

Estoy intentando obtener datos de acelerómetro y de orientación. Actualmente, creé un Acelerómetro Manager y OrientationManager. Ambos hacen la misma cosa; implemente SensorEventListener y recupere datos de los valores [] en los detectores onSensorChanged().¿Hay alguna manera de recuperar datos de sensores múltiples en Android?

¿Hay alguna manera más fácil de hacerlo? Parece que tener 2 controladores con código duplicado no es necesario. ¿Hay alguna manera de acceder a una matriz de valores [] con el acelerómetro combinado y los datos de orientación juntos?

Debido a las 2 manipuladores, yo también voy a tener que hacer esto:

orientationManager = new OrientationManager(this); 
    orientationSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    orientationSensorManager.registerListener(orientationManager, 
      orientationSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), 
      SensorManager.SENSOR_DELAY_GAME); 

    accelerometerManager = new AccelerometerManager(this); 
    accelerometerSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    accelerometerSensorManager.registerListener(accelerometerManager, 
      orientationSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
      SensorManager.SENSOR_DELAY_GAME); 

Respuesta

32

¿Se puede intentar algo como esto:

private SensorManager mSensorManager; 
private SensorEventListener mSensorListener; 

//// 


mSensorManager = (SensorManager) this 
       .getSystemService(Context.SENSOR_SERVICE); 
mSensorListener = new SensorEventListener() { 
    @Override 
    public void onAccuracyChanged(Sensor arg0, int arg1) { 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     Sensor sensor = event.sensor; 
     if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      //TODO: get values 
     }else if (sensor.getType() == Sensor.TYPE_ORIENTATION) { 
      //TODO: get values 
     } 
    } 
} 

mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME); 
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); 
+0

Esto funcionó perfectamente, gracias. – trinth

+3

Por cierto, no hay ninguna razón por la cual su actividad no pueda implementar SensorEventListener directamente, y luego pase "this" como primer argumento para registerListener(). –

+0

¿SensorEventListener no es una interfaz? ¿Puedes hacer una instancia de una interfaz? Gracias – Chaine

Cuestiones relacionadas