2013-06-27 103 views
3

我是新來的android編程。我需要開發一個應用程序,以0.05秒的採樣時間從陀螺儀讀取數據。我需要每0.05秒獲取一次數據。需要閱讀固定採樣率的android傳感器

我看着android的傳感器管理器,它給出了四種不同類型的採樣率,但它們並不統一。

+0

那麼你如何記錄所有時間,並刪除那些你不需要的時間 – Gina

回答

4

您正在開發哪些API?由於API 11您還可以指定從傳感器獲取結果的延遲時間。

SensorManager.SENSOR_DELAY_NORMAL(200000個microseceonds延遲)(默認值) SensorManager.SENSOR_DELAY_GAME(20000微秒延遲) SensorManager.SENSOR_DELAY_UI(60000微秒延遲) :Usualy,傳感器將與四個固定延遲來註冊SensorManager.SENSOR_DELAY_FASTEST(0微秒延遲)如下

傳感器將被註冊:

mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); 

所以如果你是從高達11 API開發,您可以註冊

mSensorManager.registerListener(this, mSensor, 50000); 

如果沒有,比it's會很難,你不容獲得的結果每0.05秒,但你可以通過設置SENSOR_DELAY_UI得到的結果爲每0.06秒。 另一種可能性是設置SENSOR_DELAY_FASTEST和計數到50000的東西,如

private int value = 0: 

每onSensorChanged()事件

value++; 

,直到你達到50000。但是,這不是很好的做法,作爲傳感器只有在他能夠做到的情況下才能開火如果系統繁忙,則無法保證傳感器每次都會發射。

+1

或者你可以記錄你上一次讀取的值,並檢查每個新值,如果延遲大於期望延遲,並不完美,但比使用最快的延遲和計數更精確。 – AxelH

+0

是的,也是一種可能的方法... – Opiatefuchs

0

從API 19(2013+)開始,有一個註冊API的新變種,您可以在什麼時間間隔提及您希望接收傳感器讀數。從該文檔:

布爾registerListener(SensorEventListener聽者, 傳感器傳感器, INT samplingPeriodUs, INT maxReportLatencyUs)註冊一個SensorEventListener用於在給定的取樣頻率 給定的傳感器和所述給定的最大報告延遲。

該函數與registerListener(SensorEventListener, Sensor,int)類似,但它允許事件在傳遞之前臨時保留在硬件 FIFO(隊列)中。這些事件可以存儲在硬件FIFO中的 maxReportLatencyUs微秒。一旦需要報告FIFO中的一個 事件,將按順序報告FIFO 中的所有事件。這意味着某些事件將在最大報告延遲時間到達之前報告爲 。

相關問題