2010-12-03 20 views
6

私は加速度計データと方向データの両方を取得しようとしています。現在、私はAccelerometerManagerとOrientationManagerを作成しました。彼らはどちらも同じことをします。 SensorEventListenerを実装し、onSensorChanged()リスナーのvalues []からデータを取得します。Androidで複数のセンサーデータを取得する方法はありますか

これを行う簡単な方法はありますか?重複したコードを持つ2つのハンドラが必要でないようです。結合された加速度計と方向データを一緒に使用してvalues []配列にアクセスする方法はありますか?そのため2つのハンドラの

、私もこれを行うには持っている:

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

答えて

32

は、あなたがこのような何かを試すことができます:

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

が、これは完全に働いた、ありがとうございました。 – trinth

+3

ところで、あなたのアクティビティがSensorEventListenerを直接実装することができない理由はありません。次に、 "this"をregisterListener()の最初の引数として渡します。 –

+0

SensorEventListenerはインターフェイスではありませんか?あなたはインターフェイスのインスタンスを作ることができますか?ありがとう – Chaine

関連する問題