ショートバージョン:
問題:複数のAndroidデバイスがまったく同時に(約100ミリ秒以内に)何かを実行する必要があります。たとえば、すべてのデバイスが以前に決定された時点で特定のサウンドを再生する必要があります。
質問:GPS時間を使用して、デバイスの時計が同期されていることを確認できますか?
長いバージョン:
Androidデバイスを持っている複数の人が同じ屋外の場所にいます(特定のスポーツイベントの場合)。すべてのデバイスは、特定のイベントをまったく同時に通知する必要があります(事前に決定される時間とそれ彼らが同時にそれをする限り、彼らが正確にその時にそれをすることは重要ではありません)FWIW:それらのイベントは人々が同時に彼らのスポーツ活動を始めるのを助けます。
これが私が作ることができる仮定です:
内部時計を使用してイベントを再生するタイミングを知ることはできません。ユーザーは手動で時刻を変更でき、デバイスがセルラーネットワークから時刻を取得するように設定されている場合でも、そのネットワークが正確な時刻を提供しない可能性があります。 2つのデバイスが異なるネットワークに予約されている可能性があるため、それらの時刻が十分に同期されていない可能性があります。
アプリの起動時に、各デバイスはGPS修正を要求し、GPS時間とその内部時計の差を保存できます。これで、マスターはこのGPS時間に基づいてイベントをアナウンスできます(内部クロックを使用し、以前に保存したオフセットを差し引くことにより)。
これは十分に正確で信頼できるでしょうか?
アンドレアス・ライトナー、よろしくお願いします。
currentTimeMillis()
コールバックの Location.getTime()
およびonLocationChanged()
からミリ秒単位の時間差を取得できます。 requestSingleUpdate()
を使用します
追加したいのですが、ユーザーがデータ接続を使用している場合は、NTP時間を使用できます。これは、GPS内部クロックがドリフトし、修正に時間がかかる可能性があるため、さらに正確です。
編集:この回答を編集したいと思います。 Android OSでGNSS開発者として働いた後、多くの 'メジャー' Android OEMがこれを台無しにしていることに気付きました。通常、NMEA文はチップセットまたはGNSSスタック。タイミングが適切な場合もありますが、実装によって異なります。
また、うるう秒の問題もあります。 GPS時刻はUTC時刻ではありません。そしてこれの時点で それを書くことは18秒進んでいます 。
また、ドキュメントによると、GPS時間from Location
オブジェクトはシステム時間になりました
TLDR:使用 NTP時間
一部のデバイスでは取得された時間が1日進んでいるという既知の問題があるため、GPS時間に完全に依存することはできません。その場合、大きなオフセットが発生する可能性があります。
http://code.google.com/p/Android/issues/detail?id=23937
この問題を解決するための回避策については、ここで説明しています: Android:Samsung GalaxyTabsおよびAndroid 2.2デバイスは2012年1月1日から1日前にGPS日付を表示
UTCはGPSから派生しておらず、APKはGPSを上書きします。 Android GPSクロックを無視するように設定されています。getTime()はNISTです。GPSではありません