2013-08-19 10 views
8

複数のAndroidデバイス間でタイムスタンプを同期しようとしているので、同時にタスクを開始できます。私はTimerを使用し、System.currentTimeMillis()に基づいてDateを設定することができますが、問題は、複数のデバイスのタイムスタンプが互いに離れているために精度が得られないように思えます。複数のデバイス間でタイムスタンプを同期

可能であれば、私は50〜100ミリ秒の範囲を見ています。私が持っていた1つのアイデアは、Android Beamを使って1つのデバイスのタイムスタンプを他のデバイスに送信してからデルタを計算することでしたが、実際にメッセージを送受信する前にタイムスタンプを取得する必要がありました(つまり、送信待ち、デルタが大きくなる)、そのスキームが完全に崩壊する。

複数のデバイスを同期させて、内部クロックが100ミリ秒以内になるようにするにはどうすればよいですか?これは時間を保持する外部サーバーを使用しなくても可能ですか?

可能な限り同時に複数のデバイス間で何かを行う技術についての他の提案も歓迎します。

答えて

4

なぜGPS時間を使用しないのですか? GPSからの時間タグはかなり正確です。

特定の時間にすべてのデバイスに同意してから、GPSが指示されたときに起動することができます。

+1

GPSの場所を使用してみました。私はそれを手に入れてデルタを設定することができます。まだ同期が取れていないのに、これが実行可能かどうかはわかりません。私の実際のテストでは、時々GPS信号のために1分以上待たなければならなかった。言うまでもなく、これはアプリのもう1つの必要な許可です。 今のところGPSタイムメソッドを使用して、動作する同期スキームを試すことができるかどうかを確認しますが、長期的にはGPSを使用するのが信頼できるかどうかはわかりません。 –

0

私は今同じ問題で苦労しています。私はgpsの時間を試しましたが、ユーザーが屋内でgps信号を送信することは保証できません。

私のソリューションは、すべてのデバイスがNISTのサーバーから時刻を取得し、ただのSystem.currentTimeMillis(との時間差を加算または減算持っていた

デバイスが根ざしている場合は、クロックを同期しようとすることができます。簡単な方法や難しい方法:

​​

2

は基本的に、2つの選択肢があります。

@Stefanの示唆するように、NIST、別のインターネットソース、またはGPSなど、単一の外部ソースを時間信号に使用するのが簡単な方法です。インターネットソースはNTPを使用しています。これはJava NTP clientの質問を参照してください。

難しい方法は、デバイス間でClock synchronizationを実行することです。

0

Android GPSハードウェアは、通常、秒精度しかありません。最後のミリ秒のタイムスタンプの3桁の数字は000です。

関連する問題