我非常驚訝,在Android 4.0+版本中,他們決定從可用軟件傳感器中刪除LINEAR ACCELERATION傳感器,並將其放入硬件傳感器中,這是在普通手機中很少使用的陀螺儀。我不知道他們爲什麼這麼做,但想象一下,當我交付在一部便宜的2.3手機上測試過的軟件時,我感到驚訝,並且在2個月大的手機上顯示無法實例化線性加速度傳感器。他們爲什麼要這樣做?如何使用Android中的AcceleroMeter正確計算線性加速度
爲了保存我的皮膚,我檢查了手機中是否有加速度計,它是否可用。基於this article,我應該能夠使用來自加速度計的數據計算線性加速度。我檢查了代碼,發現一個沒有聲明的變量。
public void onSensorChanged(SensorEvent event){
// In this example, alpha is calculated as t/(t + dT),
// where t is the low-pass filter's time-constant and
// dT is the event delivery rate.
final float alpha = 0.8;
float[] gravity=new float[]{0.0f,0.0f,0.0f}; //should it be here???
// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];
// Remove the gravity contribution with the high-pass filter.
linear_acceleration[0] = event.values[0] - gravity[0];
linear_acceleration[1] = event.values[1] - gravity[1];
linear_acceleration[2] = event.values[2] - gravity[2];
}
重力數組在第一次運行中包含什麼? 我是否應該像
float[] gravity=new float[]{0.0f,0.0f,0.0f};
?
還是應該包含可以通過重力傳感器獲得的真實重力數據(在常規設備中也不可用)?
計算結果是否爲正確的線性加速度數據?是否可以通過減少傳入傳感器數據中的數字來計算?
根據http://developer.android.com/guide/topics/sensors/sensors_motion.html在Android 4.0及以後,線性加速度傳感器是僅在具有陀螺儀的設備可用。「如果設備沒有陀螺儀,這些傳感器不會顯示出來,並且不能使用。」 – Jerry101
爲什麼他們決定取下2.3手機中的傳感器?所以他們認爲4.0手機中的一半(沒有陀螺儀)比2.3手機可以測量線性加速度的專業性要差一些。偉大的創新.... – Nestor
是的,它很臭。嘗試將應用程序的uses-sdk'android:targetSdkVersion'設置爲9(Android 2.3)或13(Android 3.2)。 *應該*使新操作系統與早期版本兼容。記錄該實驗的結果會很棒。 – Jerry101