每次调用onSensorChanged(SensorEvent event)
事件值后,重力传感器值会增加。值增加并且在一点时间(约1分钟)达到NaN值之后。有人会说为什么会这样吗?
代码:
private void recordData(SensorEvent e) {
String label;
int currentSensorId = -1;
switch (e.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
currentSensorId = 0;
label = LOG_LABEL_ACCELEROMETER;
break;
case Sensor.TYPE_GYROSCOPE:
label = LOG_LABEL_GYROSCOPER;
currentSensorId = 1;
break;
case Sensor.TYPE_GRAVITY:
label = LOG_LABEL_GRAVITY;
currentSensorId = 2;
break;
case Sensor.TYPE_ROTATION_VECTOR:
label = LOG_LABEL_ROTATION_VECTOR;
currentSensorId = 3;
break;
default:
label = "UNKNOWN SENSOR TYPE!";
break;
}
if (currentSensorId == -1)
return;
// Force set events frequency to value from config,
// cause sensor events minimal frequency = 0.2 sec.
timePassed[currentSensorId] = System.currentTimeMillis()
- lastSensorEventTime[currentSensorId];
if (timePassed[currentSensorId] < Config.SENSOR_DELAY_MILLISEC) {
return;
} else {
lastSensorEventTime[currentSensorId] = System.currentTimeMillis();
}
if (this.pauseRecordingData || checkSDCardMemory())
return;
fileWriter.writeEvent(label, System.currentTimeMillis(), e.values);
}
public void writeEvent(String eventSource, long timestamp, float[] values) {
Log.d(TAG, "writeEvent(); eventSource = " + eventSource);
if ( !this.fileExists ) createNewFile();
try {
String valuesString = eventSource + "\t" + String.format( "%d\t", timestamp);
for (int i = 0; i < values.length; i++) {
valuesString += String.format( "%f\t",values[i]);
Log.d(TAG, "writeEvent(); values[" + i + "] = " + values[i]);
}
buffWriter.append(valuesString + "\n");
} catch (IOException e1) {
e1.printStackTrace();
Log.d(TAG,"RECORDING EVENT TO FILE FAILED!");
}
}
答案 0 :(得分:0)
有两种可能性:
最可能的一个:您的代码中有错误,例如,您永远不会重置变量或添加值(有关详细信息,请阅读http://developer.android.com/guide/topics/sensors/sensors_motion.html)。
您的重力传感器坏了(检查一下,试试另一台设备)。
如需更多帮助,请发布您的代码,如何访问和管理从重力传感器读取的值。
编辑:
正如我所提到的,代码中出现了错误。传感器读取延迟应设置为可能的选项之一:
int SENSOR_DELAY_FASTEST get sensor data as fast as possible
int SENSOR_DELAY_GAME rate suitable for games
int SENSOR_DELAY_NORMAL rate (default) suitable for screen orientation changes
int SENSOR_DELAY_UI rate suitable for the user interface
而不是自定义值!!!
感谢您找到解决方案。