複数のセンサーからデータを取得する必要があります。すべてのセンサーに対して単一のリスナーを作成し、センサーごとに個別のリスナーを作成しようとしました。複数のセンサーが追加された場合、どちらの方法も機能しません。複数のセンサーが追加された場合、センサーによって生成されたデータは無効になります。誰かがこの問題の解決策を見つけましたか?
センサーを追加するコードは次のとおりです。
List <Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
//add sensor listeners
for(Sensor curSensor : sensorList){
sensorManager.registerListener(sensorListener,
curSensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
センサーの変更に応答するコードは次のとおりです。
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorListener = new SensorEventListener(){
@Override
public void onAccuracyChanged(Sensor arg0, int arg1){
}
@Override
public void onSensorChanged(SensorEvent event){
sensorValues.put(Integer.valueOf(event.sensor.getType()),event.values);
updateDisplayValues();
}
};
最後に、表示を更新するコードは次のとおりです。
private void updateDisplayValues(){
Enumeration<Integer> keys = sensorValues.keys();
int curIndex = 0;
while(keys.hasMoreElements()){
Integer key = keys.nextElement();
String curStringForKey = getStringForKey(key);
if(curStringForKey==null)continue;
float [] value = sensorValues.get(key);
if(key==TYPE_ORIENTATION){
ValueDisplay[curIndex].setText(curStringForKey + ": " + getResources().getConfiguration().orientation);
}else{
String stringToPrint = new String();
int paramLength = value.length;
for(int i = 0; i <paramLength; i++)
stringToPrint += value[i]+", ";
ValueDisplay[curIndex].setText(curStringForKey + ": " + stringToPrint);
}
curIndex ++;
}
}