2011-11-21 126 views
19

短版:通過GPS時間同步Android設備?

問題:我需要一些Android設備在精確的同一時間內(CA 100毫秒)做一些事情。例如,我希望所有設備在以前確定的時間點播放某種聲音。

問題:我能否使用GPS時間來確保設備時鐘已同步?

加長版:

其Android設備上的幾個人在同一室外位置(對於某些特定的體育事件)。所有設備應該在同一時間發出某些事件的信號。 (什麼時候才能確定,只要他們在同一時間執行,那麼他們在那個時間執行並不重要)。 FWIW:這些事件將幫助人們同時開始他們的體育活動。

這裏是假設我能:

  • 有可能會或可能不會是小區覆蓋。 (它在室外,可能遠在城市地區)
  • 設備可能連接到互聯網,也可能不連接到互聯網。 (有些人可能沒有數據計劃)
  • 設備可以相互通話。如果設備沒有連接到互聯網,他們將通過WiFi連接(儘管WiFi可能沒有互聯網網關)。
  • 設備在室外(不在建築物內)。 (這很好,這意味着所有設備都可以獲得GPS定位)
  • 設備在物理上彼此接近(即300平方米內)。 (不知道這是很重要的)

我不能使用內部時鐘知道什麼時候打事件:用戶可以手動更改時間,即使設備設置以獲得從蜂窩網絡時,該網絡可能無法提供準確的時間。兩個設備可能被預訂到不同的網絡,因此他們的時間可能不會很好地同步。

在應用程序啓動時,每個設備都可以要求GPS修復並保存GPS時間與其內部時鐘之間的差異。現在主人可以根據這個GPS時間發佈事件(通過使用它的內部時鐘並減去它之前保存的偏移量)。

這是否足夠精確和可靠?

提前許多感謝, 安德烈亞斯·萊特納

+0

你可以使用應用程序GPS時間從市場 https://market.android.com/details?id=net.sourcewalker.gpstime – andreasg

+0

這是一個好主意。我可以使用這個應用程序來嘗試,如果它的工作。最終,我想將這個功能構建到我的應用程序中。我不想讓我的用戶安裝另一個應用程序(即使他們不需要它),甚至更需要root權限的問題。 – user1057534

+0

嗨,我正在追求同樣的事情。你是否能夠實現這一目標? –

回答

13

你可以在毫秒從currentTimeMillis()Location.getTime()onLocationChanged()回調的時間差。使用requestSingleUpdate()


我只想補充一點,如果用戶有一個數據連接,他們可以使用NTP時間,這是更準確,因爲GPS的內部時鐘可能會漂移和糾正還需要一段時間。


編輯: 我想編輯答覆。在擔任Android操作系統中的GNSS開發人員之後,我意識到許多「主要」Android OEM已經搞砸了。通常,NMEA語句是在芯片組或GNSS堆棧中生成的。有時候時間是正確的,這取決於實施。

還有一個閏秒的問題。 GPS時間不是UTC時間。而且這個writing it is 18 seconds ahead

而且GPS現在從Location對象的時間是系統時間爲每個文件

TLDR:使用NTP time

+3

聽起來不錯。我不需要改變系統時間。如果每個設備(安裝了我的應用程序)計算出偏移量並因此可以使用通用參考時間就足夠了。 – user1057534

0

UTC不是從GPS派生,APK覆蓋GPS。 Android設置爲忽略GPS時鐘。你是getTime()是NIST。不是GPS

+0

如果這應該是對原始問題的回答,那麼您需要改進它。 – DuncanKinnear