我的Samsung Galaxy Nexus上有一个非常奇怪的问题 - 我尝试读出一些传感器值,例如:来自陀螺仪。非常基本的代码,只是一个传感器监听器,在经过一段时间的简单集成之后将值放入列表中。
当我在Nexus S上运行代码大约60秒时,我可以注册大约60.000个传感器事件(SENSOR_DELAY_FASTEST)但是如果我在Galaxy Nexus上运行它,我只能在60秒内获得大约6000个值。
有没有办法增加这个?我真的需要更多传感器数据用于我正在做的事情,除了设备之外,唯一的区别是操作系统版本:Galaxy Nexus上的4.0.2 - Nexus S上的4.0.3。
任何建议都将不胜感激!
编辑 - 代码:
SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);
LogSensorEventListener listener = new LogSensorEventListener(
SensorLoggerActivity.this, Sensor.TYPE_GYROSCOPE);
sm.registerListener(listener, sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);
LogSensorEventListener也是SensorEventListenerInterface的一个非常基本的实现:
@Override
public void onSensorChanged(SensorEvent event) {
final float dT = (event.timestamp - mTimestamp) / 1000000000.f;
if (dT < 1) { // just a fix for the first step
mRelZ += event.values[2] * dT;
list.add(mRelZ);
list2.add(event.timestamp);
}
mTimestamp = event.timestamp;
mRelZ最初设置为0,两个列表应该跟踪时间和测量值。如果完成了我的测量(单击按钮),则值将写入文件:
try {
for (int i = 0; i < list.size(); i++) {
long time = list2.get(i);
if (mStartTime < 0) {
mStartTime = time;
time = 0;
} else {
time = time - mStartTime;
}
float timef = time / 1000000000.0f;
sb.append(timef);
sb.append(";");
sb.append(Math.toDegrees(list.get(i)));
sb.append("\n");
}
mOutFileStream.write(sb.toString().getBytes());
mOutFileStream.flush();
mOutFileStream.close();
} catch (IOException e) {
}
答案 0 :(得分:0)
Android设备没有关于报告传感器更改的方式和时间的标准。例如,某些设备不会报告更改,除非有更改(例如设备正在移动)。有些设备会报告大量的更改,而其他设备会更改,即使您使用延迟,例如SensorManager.SENSOR_DELAY_FASTEST
。