3

Android では、GPS 位置情報の更新から取得したタイムスタンプがエポック以降のミリ秒単位であるのに対し、SensorEvent 更新 (加速度計など) のタイムスタンプは起動時からの ns 単位であることに気付きました。

GPS タイムスタンプを SensorEvent タイムスタンプの形式に変換したいのですが、これを行う良い方法を知っている人はいますか?

私は次のことを試しました: エポック以来、システムの起動時間を一度測定しました:

startupTime = System.currentTimeMillis() - SystemClock.uptimeMillis();

GPS 位置情報の更新ごとに、起動時間を差し引きます。

timestamp = loc.getTime() - startupTime;

しかし、これらの変換されたタイムスタンプはまだ SensorEvent タイムスタンプに準拠していません。まだ数秒の差があります...

4

3 に答える 3

2

を使用しないでください。これSystemClock.uptimeMillis()は、デバイスがスリープ モードにあった時間なしで起動後の時間を測定するためです。代わりに を使用しますSystemClock.elapsedRealtime()

于 2012-08-09T21:02:32.697 に答える
1

私は現在、圧力センサー イベントの応答を調べています。そこに報告されたタイムスタンプは、エポックからのナノ秒単位のようです。1,000,000 で割ると、同等の値が得られます。これは、センサー値の経過時間をミリ秒で調べるときに私の経験で見ているものです。

SensorEvent のタイムスタンプを 1000000 で割ると、GPS から取得した Location オブジェクトによって提供される getTime() メソッドと同等の値が得られます。

参考文献:

http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp (ただし、どのクロックが使用されているかはわかりません)

http://developer.android.com/reference/java/lang/System.html#currentTimeMillis()

http://developer.android.com/reference/android/location/Location.html#getTime()

于 2013-04-25T21:01:07.460 に答える
0

個人的にSystem.currentTimeMillis()は、GPS 位置またはセンサー イベントを取得するたびに呼び出し、これらのイベントを比較するための適切なタイムスタンプとして記録します。相対的に言えば、数ミリ秒以内の精度である必要があります。つまり、センサーイベントが GPS 修正のミリ秒以内に発生しない限り、この方法を使用すると常に正しい「前」と「後」の関係が得られます。さらに、これらの時間を数ミリ秒よりも正確にすることが実際に問題になるアプリケーションを想像するのは難しいため、これは簡単で優れた手法であるはずです。

loc.getTime() は gps レシーバーからのもので、System.currentTimeMillis() とは大きく異なります。携帯電話の時計をいわゆる「GPS 時間」と同期するように設定しようとしている場合を除き、loc.getTime() は完全に無視します。

于 2012-06-01T20:54:42.697 に答える