2010-12-03 25 views
6

Birden fazla sensör verisi almak için bir yolu var hem ivmeölçer hem de yönlendirme verileri almaya çalışıyorum. Şu anda bir AccelerometerManager ve OrientationManager oluşturdum. İkisi de aynı şeyi yapıyorlar; SensorEventListener'ı uygulayın ve onSensorChanged() dinleyicilerindeki değerlerden [] veri alın.Android

Bunu yapmanın daha kolay bir yolu var mı? Çift kodlu 2 işleyiciye sahip olmak gereksizdir. Birleşik ivme ve yönlendirme verileriyle birlikte bir değer [] dizisine erişmenin bir yolu var mı? Çünkü 2 işleyicileri

, ben de bunu yapmak için yaşıyorum:

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

cevap

32

böyle bir şey deneyebilir miyim:

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

bu mükemmel çalıştı, teşekkür ederim. – trinth

+3

Bu arada, Aktivitenizin doğrudan SensorEventListener uygulamasını gerçekleştirememesinin bir nedeni yoktur ve daha sonra “this” öğesini registerListener() öğesinin ilk argümanı olarak iletirsiniz. –

+0

SensorEventListener bir arabirim değil mi? Bir arayüz örneği yapabilir misiniz? Teşekkürler – Chaine