この質問は多少時間がかかるかもしれませんが、多くの提案に対して公開されています。複数のAndroid搭載デバイスのデータを記録するための同期時間
問題文:
我々はいくつかのAPIレベル8(アンドロイド2.2)我々は、すなわちジェットコースターの上に、遊園地での加速度データを記録するために使用されますmyTouchのデバイスを持っています。また、加速度計のポイントを記録した時刻の関数としてプロットすることができる視覚化機能も備えています。ここにジレンマがあります! Androidデバイスのシステム時間はすべて同じではなく、ミリ秒の精度で同じ時間に設定することもできません(手作業でしか細かい精度ではひどい)。
ソリューション試み:
だから、私は最初のアプリの起動時に見つかったGPS時間に応じて記録データに頼っ。長いプロセスの短縮:GPS時間を取得し、システム時間を取得し、差分を取得し、データポイントを記録すると、システム時間を再度取得し、その時間に差を戻し、記録の開始時間としてラベル付けし、それぞれに対して200ミリ秒そこから記録されたデータポイント。 getLastKnownLocation()
を使用して
あまり正確ではありません。ただし、2つの(GPS時刻を取得するための)問題があります。実際、それは非常に不正確なようです。それは現在のGMT/UTC時間から9分の時間を私に与えている。同時に、Androidデバイスではシステム時間もほぼ9分です... GPS時間とシステム時間の差は通常1000〜5000ミリ秒(1〜5秒)です。私のコードが間違っている可能性があると思います。私はあなたのためにそれを下に貼り付けました。
requestSingleUpdate()
は、最近の場所とおそらく非常に正確な時刻を取得するため、使いやすいでしょう。問題?私たちが持っていないAPIレベル9 ...デバイスが必要です。
アイデア:
ここで私が持っていたアイデアは、しかしだ - 私は何とかウェブサイトからグローバル時間を引っ張り、記録時とそこから引き出された時間を使用した場合にどのような?ここでの問題 - 私はそれをどうやって行うのか分かりません。私はちょうど私の考えを考えています...
もう一つのアイデア - 私は単純に分かりませんタイプのグローバルgetTime()
タイプですか?私はAndroidのは、同様のクロックからの時間を引っ張りたい理由
推論:
ジェットコースターの上に座って二人を想像 - フロントシートに1、背面に1つずつ。データを記録するとき、前の人は、明らかに、後ろにいる人の少し前に加速度を経験します(これを私たちの視覚化グラフで見たいと思います)。そのため、これらのポイントは1つのグローバル時間に基づいて記録されることが、ミリ秒精度まで重要です。
コード:
Criteria c = new Criteria();
c.setAccuracy(Criteria.ACCURACY_FINE);
if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
mLocationManager.requestLocationUpdates(mLocationManager.getBestProvider(c, true), 0, 0, AmusementPark.this);
Criteria criteria = new Criteria();
String bestProvider = mLocationManager.getBestProvider(criteria, false);
Location location = mLocationManager.getLastKnownLocation(bestProvider);
try {
gpsTime = location.getTime();
systemTime = System.currentTimeMillis();
timeDif = gpsTime - systemTime;
Log.e("timedif", "GPS: " + gpsTime + ", System: " + systemTime +", Dif: " + timeDif);
} catch (NullPointerException e){
}
}
更新:
Here、誰かが "サーバー" getTime()
のようなものを示唆しています。私は彼のコード/答えが本当に好きですが、この "サーバー"は何ですか、そして/あるいはこれをベストな解決策にするにはどうしたらいいですか?
実際に私たちが持っているサーバーと通信しています。私たちの人のうちの1人が、Androidデバイス経由で通信できるサーバーから時間を得るAPI関数を作成するかどうかを見ていきます。コードもありがとう - 非常に便利です。これがうまくいくなら、私はあなたに戻ってきます。うまくいかない。 – Mxyk
ご協力ありがとうございました。私たちはDatagramSocketsを使用して、すべての電話機がホストの電話機の時刻に同期するように、同様のWiFiネットワーク上の時刻をホスト/受信することに決めました。 DatagramSocketに関する質問があれば、私は尋ねるでしょう。 – Mxyk
@Mxykモバイルデバイスの時刻をどのくらい正確に同期させましたか? – flux