![](/img/trans.png)
[英]How to display the exactly time from sensorevent.timestamp for Android?
[英]Android SensorEvent Timestamp constant
我目前正在編寫一個簡單的android應用程序,以計算設備imu的偏差。 在執行此操作時,我遇到了event.timestamp值的問題
使用代碼:
float dT = (event.timestamp-accel_timestamp)*NS2S;
從Android參考指南中的示例中,根據四元數計算旋轉矩陣。
當我使用Galaxy Nexus-S運行代碼時,兩次測量之間的dT為0.06〜0.07秒,但是當我在LG Nexus 4或Nexus 7上運行相同的代碼時,dT始終為0。我知道這個問題, Android SensorEvent時間戳問題是Nexus 7時間戳是unix時間戳,但連續測量之間的差值不應該始終為零。 Nexus 4和Nexus 7都具有相同的IMU,這可能是從IMU創建時間戳的過程中的錯誤嗎?
哇,好吧,這肯定是一個錯誤!
每個SensorEvent的時間戳都被覆蓋,就像它是一個靜態變量一樣。
當我記錄事件發生時的時間戳字符串時,所有值都不同。
這些事件未更改地存儲在數組中。
現在,數組中的每個SensorEvent都具有相同的時間戳,但是value數組仍然不同(即,它們不是同一對象,並且包含不同的信息……時間戳除外)。
Google / HTC,請返回我生命中的3個小時!
除非有人可以解釋此行為,否則我將提交錯誤報告。 它肯定沒有在API中記錄 。
同時,請嘗試以下解決方案 :
import android.hardware.Sensor;
import android.hardware.SensorEvent;
public class UnbrokenSensorEvent {
public long timestamp;
public float[] values;
public Sensor sensor;
public UnbrokenSensorEvent(SensorEvent event){
this.timestamp = event.timestamp;
this.values = event.values;
this.sensor = event.sensor;
}
}
然后在您的偵聽器中執行以下操作:
ArrayList<UnbrokenSensorEvent> results = new ArrayList<UnbrokenSensorEvent>();
public void onSensorChanged(SensorEvent event) {
results.add(new UnbrokenSensorEvent(event));
}
重構應該非常容易,因為SensorEvent和UnbrokenSensorEvent具有相同的公共字段。 如果您需要使用其他SensorEvent功能,只需繼續並將其插入完整版本即可。
它很hacky,但是恕我直言,快速hack總是比等待更新API更好!
還要注意有關SensorEventListener的onSensorChanged-方法的文檔:
注意:該應用程序不擁有作為參數傳遞的事件對象,因此無法保留該對象。 該對象可以是內部池的一部分,並且可以由框架重用。
在這里找到: http : //developer.android.com/reference/android/hardware/SensorEventListener.html#onSensorChanged%28android.hardware.SensorEvent%29
...這表明不應保存對SensorEvent對象的引用。
如果您從此處復制了代碼段,請注意它有一個錯誤。 需要更換
private float timestamp;
至
private long timestamp;
在其他情況下,您的增量時間將始終包含奇怪的值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.