我是新來的android編程。我需要開發一個應用程序,以0.05秒的採樣時間從陀螺儀讀取數據。我需要每0.05秒獲取一次數據。需要閱讀固定採樣率的android傳感器
我看着android的傳感器管理器,它給出了四種不同類型的採樣率,但它們並不統一。
我是新來的android編程。我需要開發一個應用程序,以0.05秒的採樣時間從陀螺儀讀取數據。我需要每0.05秒獲取一次數據。需要閱讀固定採樣率的android傳感器
我看着android的傳感器管理器,它給出了四種不同類型的採樣率,但它們並不統一。
您正在開發哪些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。但是,這不是很好的做法,作爲傳感器只有在他能夠做到的情況下才能開火如果系統繁忙,則無法保證傳感器每次都會發射。
或者你可以記錄你上一次讀取的值,並檢查每個新值,如果延遲大於期望延遲,並不完美,但比使用最快的延遲和計數更精確。 – AxelH
是的,也是一種可能的方法... – Opiatefuchs
活動可接收大於指定速率
更快或更慢從https://developer.android.com/reference/android/hardware/SensorManager.html
事件可以接收比指定的速率更快或更慢。通常事件收到更快。可以是SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME,SENSOR_DELAY_FASTEST之一或延遲(以微秒爲單位)。
從API 19(2013+)開始,有一個註冊API的新變種,您可以在什麼時間間隔提及您希望接收傳感器讀數。從該文檔:
布爾registerListener(SensorEventListener聽者, 傳感器傳感器, INT samplingPeriodUs, INT maxReportLatencyUs)註冊一個SensorEventListener用於在給定的取樣頻率 給定的傳感器和所述給定的最大報告延遲。
該函數與registerListener(SensorEventListener, Sensor,int)類似,但它允許事件在傳遞之前臨時保留在硬件 FIFO(隊列)中。這些事件可以存儲在硬件FIFO中的 maxReportLatencyUs微秒。一旦需要報告FIFO中的一個 事件,將按順序報告FIFO 中的所有事件。這意味着某些事件將在最大報告延遲時間到達之前報告爲 。
那麼你如何記錄所有時間,並刪除那些你不需要的時間 – Gina