2010-11-04 50 views
2

因此,我正在編寫一個檢測運動的應用程序,並需要根據各種運動進行校準。在過去幾天裏,我注意到SensorEventListener註冊後,onSensorChanged(SensorEvent)丟棄不完整(因此錯誤).values[]。這種行爲搞砸了我的校準過程,並且表示運動的力量太高。我已經驗證過,我已下載並測試過的每個加速度計日誌記錄應用都是這種情況,所以它不是特定於我的代碼的錯誤。我認爲這可能是由壞硬件(可能是我的moto droid 1特有)或我使用的自定義ROM引起的軟件錯誤(簡稱Stunning 4.9,來自Froyo 2.2.1源代碼)造成的。Android - motodroid 1上的加速度傳感器首先報告不正確的值?

示例:

sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
SENSOR_DELAY); 
.... 
onSensorChanged(SensorEvent event){ 
    // event.values[0] = 0.0 
    // event.values[1] = -0.47 
    // event.values[2] = 0.0 
} 
.... 
onSensorChanged(SensorEvent event){ 
    // event.values[0] = 0.08 
    // event.values[1] = -0.47 
    // event.values[2] = 0.0 
} 
.... 
onSensorChanged(SensorEvent event){ 
    // event.values[0] = 0.08 
    // event.values[1] = -0.47 
    // event.values[2] = 10.1 
} 

正如你所看到的,它通常需要2個讀數才能訪問所有正確的值。

任何人都可以在moto droid 1或其他手機上確認或否認此行爲嗎?您認爲一個好的解決方案是放棄前兩個或三個讀數,以便它們不會扭曲我的校準?

+0

兩個摩托羅拉機器人的相似經驗。 – luser845 2011-07-19 00:39:20

回答

2

聽起來對我來說很合理。也許你可以先用最快的延遲註冊你的聽衆,這樣你可以快速讀出那些不好的讀數,然後用你想要的更新速率重新註冊以進行校準。你可以使用兩個不同的聽衆,第一個聽衆不理會,然後註銷自己並註冊其他(好的)聽衆。