我需要从多个传感器获取数据。我已经尝试为所有传感器创建单个侦听器,并尝试为每个传感器创建单独的侦听器。如果添加了多个传感器,则这两种方法都不起作用。如果添加了多个传感器,则传感器产生的数据无效。有没有人找到解决这个问题的办法?
以下是添加传感器的代码:
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 ++;
}
}发布于 2012-11-18 02:16:57
你所说的:
传感器产生的数据无效
我认为问题不在于注册多个传感器,如果您只是在方法onSensorChanged中打印传感器类型和值,即使用Log.d(),它应该可以正常工作。
sensorValues对象中的问题以及您在方法updateDisplayValues中访问它的方式,请确保它是一个线程安全类型。
传感器更新非常快,并且在updateDisplayValues()中执行循环似乎不是正确的设计。
编辑:
String stringToPrint = new String();
int paramLength = value.length;
for(int i = 0; i <paramLength; i++)
stringToPrint += value[i]+", ";这与你的问题无关,但上面的代码确实不是很好的实践。字符串是不可变的对象,所以每次你试图修改一个字符串(例如stringToPrint值“+=”)时,都会创建一个新的字符串对象。改用StringBuffer或StringBuilder (一个是线程安全的,另一个不是)
https://stackoverflow.com/questions/13433155
复制相似问题