一位朋友和我正在開發一個應用程序,用於從加速度計讀取數據以便稍後處理。我們正在使用黑莓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