一位朋友和我正在开发一个应用程序,用于从加速度计读取数据以便稍后处理。我们正在使用黑莓Playbook(基于Android)。从本机API检索时,加速度计的数据是否更准确?
我们需要尽可能准确的数据。他表示,与使用Java API获取的读数相比,使用本机C API完成后,他从Playbook加速计获得的读数更准确。我认为他可能从每个API读取数据的速度让他认为C代码读数更准确。
读取速率设置和数据这样的读取C:
/* 25000 microseconds = 25 miliseconds */
static const int ACCELEROMETER_RATE = 25000;
sensor_set_rate(SENSOR_TYPE_ACCELEROMETER, ACCELEROMETER_RATE);
sensor_set_skip_duplicates(SENSOR_TYPE_ACCELEROMETER, true);
/* ...code ommited... */
/* gets the data */
sensor_event_get_xyz(event, &force_x, &force_y, &force_z);
而且在Java中是这样的:
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI);
/* ...code ommited... */
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;
mSensorX = event.values[0];
mSensorY = event.values[1];
mSensorZ = event.values[2];
}
我之前SensorManager.SENSOR_DELAY_UI`套读阅读速度大约为20ms,但我不确定。
这是否有意义,这些C代码将获得比Java中的代码更准确的数据?
你(或你的朋友)的意思是“更准确”吗?你怎么知道真正的价值?你的意思是它打印更多的数字? – byrondrossos 2012-04-20 15:00:05
@byrondrossos根据他的要求,更精确的意思是当设备处于静止位置时,即数据不会发生太大变化,即设备放置在桌子上时,(x,y,z)读数加速度计不应该像疯了一样变化,就像在某些设备上发生的那样。 – AntonioJunior 2012-04-20 15:07:38
如果传感器抖动是一个问题,您需要自己处理,除非驱动程序可以为您做。在C代码中,调用'sensor_set_skip_duplicates'可能会改变Java代码无法访问的内容。 – HonkyTonk 2012-04-20 15:13:18