Мне нужно получить данные с нескольких датчиков. Я попытался создать одного слушателя для всех датчиков и попытался создать отдельных слушателей для каждого датчика. Ни один из методов не работает, если добавлено более одного датчика. Если добавлено несколько датчиков, данные, полученные датчиком, недействительны. Кто-нибудь нашел решение этой проблемы?
Вот код для добавления датчиков:
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 ++;
}
}
sensorValues
? - person Sam   schedule 17.11.2012updateDisplayValues()
, я просто использовалLog.v(event.sensor.getName(), Arrays.toString(event.values));
вonSensorChanged()
. Данные, которые я видел, были достоверными. Я даже выделил датчик освещенности, как вы упомянули ниже, но я не могу воспроизвести то, что вы описали. Я предполагаю, что что-то не так вupdateDisplayValues()
. - person Sam   schedule 17.11.2012