2012-08-26 49 views
2

我需要每n秒獲得一個傳感器值。 在寄存器偵聽器中設置時間似乎不夠,就好像沒有發生任何變化一樣,沒有事件被調用,而我想要獲取傳感器的值,即使它沒有改變...每n秒得到傳感器值

+0

哪個傳感器?一般來說,如果傳感器自上次報告以來沒有變化,則報告它的價值是沒有意義的,以便減少CPU和電池的使用量。 爲什麼你不記得價值,如果你沒有收到報告,使用以前記住的價值? – Simon

+0

Accellerometer ...但是你的建議是正確的,但我不知道如何設置頻率。假設我想每n秒鐘更新一次:如果我將其設置爲n秒,那麼當我閱讀時我可能會錯過活動。另一方面,如果我將它設置爲小於n並且發生事件(加速度> 0),加速停止(加速度= 0),則我的變量將包含零:無移動,這將是假的。 – user1610075

+0

您無法控制頻率,但可以在事件發生變化時接收事件,並且可以靜態讀取當前值並將其靜態存儲。因此,當你開始時,獲取值然後開始你的計時器。重要的概念是你的計時器只是你想要更新的頻率,而不是你多久讀一次傳感器。註冊SensorEventListener(http://developer.android.com/reference/android/hardware/SensorEventListener.html)以更新靜態存儲的值。 – Simon

回答

1

您可以創建一個線程,可以讓它睡眠n秒鐘,然後監聽傳感器數據。你也可以在其中創建一個名爲getSensorData()的方法,它將返回數據類型。

我希望這會有所幫助。

0

我這幾天也遇到過這個問題。我通過以下方式解決它:

在onSensorChanged方法中,我將所有數據存儲到一個數組中,比如acc [time,acc_x,acc_y,acc_z]。每次發生傳感器變化時,我都會檢查此時間戳與acc中存儲的第一個時間戳(acc [0])之間的時間差。如果差值大於0.2s(使用您想要的時間範圍),我將在時間範圍內使用acc的平均值,例如meanAcc,並將其存儲到另一個數組中。 然後,acc將被清除。並重覆上述步驟。

幫助可以幫助。