我建立一個應用程序,它必須將各種傳感器值同時記錄到一個.csv文件(如果傳感器可用)。任何一個建議如何將值插入到csv文件中)。是否有可能在單個傳感器更改事件中記錄所有.csv值。Android傳感器同時記錄值
Anva
我建立一個應用程序,它必須將各種傳感器值同時記錄到一個.csv文件(如果傳感器可用)。任何一個建議如何將值插入到csv文件中)。是否有可能在單個傳感器更改事件中記錄所有.csv值。Android傳感器同時記錄值
Anva
只能在一個時間接收來自1個傳感器的數據,並且所述傳感器可以是在不同的時間間隔報告數據。
有幾種方法可以解決這個問題。
最簡單的方法是緩存每個傳感器的值,然後每當您獲取任何傳感器的新數據時,都會更新該傳感器的緩存值,然後用所有緩存的傳感器值寫入新的CSV行。這個新的CSV行只會與之前剛剛更新數據的1個傳感器不同。對於傳感器,你已經有了不成文的數據即數據 -
(Pseudo-code)
onSensorChanged(SensorEvent event) {
//Note: in practice, you need to copy the values out of the event.values array
//using, for example, System.arraycopy
cached_values[event.sensor.getType()] = event.values;
writeCsvLine(cached_values);
}
或者,而不是每次都寫一行CSV的你會得到一個數據,你可以直到你得到一個「重複」緩存的傳感器值對於。然後,您將爲緩存值寫出一個CSV行,爲每個傳感器重置您的「is_written」標誌,並更新剛得到的傳感器的緩存值。這樣,CSV文件中的重複值不會很多,但仍然保證不會錯過任何報告的傳感器值。
(Pseudo-code)
onSensorChanged(SensorEvent event) {
if (!cached_value_written[event.sensor.getType()]) {
writeCsvLine(cached_values);
cached_values_written.reset(); //reset all flags to true
}
cached_values[event.sensor.getType()] = event.values;
cached_value_written[event.sensor.getType()] = false;
}
另一種方法是緩存的傳感器值,你讓他們,然後在一個單獨的線程,你會搶的「當前」值每,比如說,1秒,並把它們寫出來。在這種方法中,您需要小心地同步對緩存值的訪問,因爲您將在單獨的線程中讀寫。
(Pseudo-code)
onSensorChanged(SensorEvent event) {
synchronized(cached_values) {
cached_values[event.sensor.getType()] = event.values;
}
}
//on a separate thread:
run() {
while (true) {
Thread.sleep(1000);
synchronized(cached_values) {
writeCsvLine(cached_values);
}
}
}
,或者,而不是一個單獨的線程,檢查每1秒,你可以存儲在你上次寫的值的時間,然後當你在一個新的價值得到,檢查1秒(或無論您希望使用哪個間隔),自上次寫入數據以來已過去了,如果是,請使用當前緩存的值編寫新的CSV行。
(Pseudo-code)
onSensorChanged(SensorEvent event) {
long currentTime = System.currentTimeMillis();
cached_values[event.sensor.getType()] = event.values;
if (currentTime - lastWrittenTime >= 1000) {
writeCsvLine(cached_values);
lastWrittenTime = currentTime;
}
}
我不是很理解這個問題,你問的是如何同步傳感器輸出,或者你問一個關於插入數據的問題? – Idistic
您的意思是您想要將數據寫入傳感器的事件處理程序中嗎? –
謝謝你的時間....我需要記錄所有的傳感器(accl,prox。,gps等)...... – Anva316