2011-11-21 3 views
19

짧은 버전 :GPS 시간을 통해 Android 기기를 동기화 하시겠습니까?

문제 : 나는 (CA 100 밀리 초 이내) 정확히 같은 시간에 뭔가를 여러 안드로이드 장치가 필요합니다. 예를 들어, 모든 장치가 이전에 결정된 특정 시점에 특정 사운드를 재생하도록합니다.

질문 : GPS 시계를 사용하여 기기 시계가 동기화되어 있는지 확인할 수 있습니까?

긴 버전 : 안드로이드 장치를 가진

여러 사람들이 (일부 특정 스포츠 이벤트에 대한) 같은 야외 위치에 있습니다. 모든 장치는 정확한 시간에 특정 이벤트를 신호해야합니다. (어떤 시간은 손보다 먼저 결정될 것이고, 같은 시간에 그것을하는 한 정확하게 그 시간에 그것을하는 것이 중요하지 않다). FWIW : 이러한 이벤트는 사람들이 동시에 스포츠 활동을 시작하는 데 도움이됩니다.

  • 또는 셀 커버리지가되지 않을 수도 있습니다 : 여기

    내가 할 수있는 가정입니다. (옥외에서 도시 지역까지 멀어 질 수 있습니다.)
  • 장치가 인터넷에 연결되어 있거나 연결되어 있지 않을 수 있습니다. (일부 사용자에게는 데이터 요금제가 없을 수도 있습니다.)
  • 서로 통신 할 수 있습니다. 기기가 인터넷에 연결되어 있지 않으면 Wi-Fi를 통해 연결됩니다 (Wi-Fi에 인터넷 게이트웨이가 없을 수도 있음).
  • 장치가 건물 외부에 있지 않습니다. (좋은 점은 모든 기기가 GPS 수정을받을 수 있음을 의미합니다.)
  • 기기가 서로 물리적으로 (즉 300m2 이내에) 가까이 있습니다. (중요한지 확실하지 않음)

이벤트 재생시기를 알기 위해 내부 시계를 사용할 수 없습니다. 사용자가 수동으로 시간을 변경할 수 있으며 장치가 셀룰러 네트워크, 해당 네트워크에서 시간을 가져 오도록 설정되어 있더라도 정확한 시간을 제공하지 못할 수도 있습니다. 두 개의 장치가 서로 다른 네트워크에 예약 될 수 있으므로 시간이 동기화되지 않을 수 있습니다.

앱 시작시 각 장치는 GPS 수정을 요청하고 GPS 시간과 내부 시계의 차이를 저장할 수 있습니다. 이제 마스터는이 GPS 시간을 기반으로 이벤트를 발표 할 수 있습니다 (내부 시계를 사용하고 이전에 저장 한 오프셋을 뺄 때).

충분히 정확하고 신뢰할 수 있습니까? 사전에

많은 감사, 안드레아스 레이트 너

+0

당신은 시장에서 GPS를 시간을 사용하실 수 있습니다 https://market.android.com/details?id=net.sourcewalker.gpstime – andreasg

+0

그건 좋은 생각입니다. 나는 그것이 작동하는 경우이 응용 프로그램을 사용해 볼 수 있습니다. 결국 내 애플 리케이션 에이 기능을 구축하고 싶습니다. 나는 사용자에게 다른 앱 (필요하지 않더라도)을 설치하고 루트 액세스가 필요한 더 문제가있는 앱을 설치하도록 요청하고 싶지 않습니다. – user1057534

+0

안녕하세요, 저는 같은 것을 추구하고 있습니다. 당신이 이것을 성취 할 수 있었습니까? –

답변

13

당신은 onLocationChanged() 콜백에서 currentTimeMillis()Location.getTime()에서 밀리 초 단위의 시간 차이를 얻을 수 있습니다. 난 그냥 사용자가 표류 수있는 GPS 내부의 시계가 더 정확 NTP 시간을 사용할 수있는 데이터 연결을 가지고 있으며, 그것을 수정하는 동안 걸리는 경우 다음 사항을 추가 할 requestSingleUpdate()


사용합니다.


편집 : 이 답변을 수정하고 싶습니다.Android OS에서 GNSS 개발자로 일한 후 많은 '주요'Android OEM이 이러한 일을 망쳤다는 것을 깨달았습니다. 일반적으로 NMEA 문장은 칩셋 또는 GNSS 스택에서 생성됩니다. 때때로 때가 맞습니다. 구현에 달려 있습니다.

또한 두 번째 도약 문제가 있습니다. GPS 시간은 UTC 시간이 아닙니다. 그리고이 writing it is 18 seconds ahead. 일부 장치에 대한 알려진 문제가 시간이있는 한 당신은 GPS 시간에 전적으로 의존 할 수 NTP time

+3

좋은 소리. 시스템 시간을 변경할 필요가 없습니다. 그것은 (내 애플 리케이션을 설치 한) 모든 장치가 그 오프셋을 계산하고 따라서 공통 기준 시간과 함께 일할 수 있다면 충분하다. – user1057534

2

사용

또한 Location 객체에서 시간은 지금

이 TLDR 문서에 따라 시스템 시간입니다 GPS 일부 기기 용으로 검색 한 날짜가 하루 앞당겨집니다. 이 경우 큰 오프셋을 얻을 수 있습니다.

http://code.google.com/p/android/issues/detail?id=23937

이 문제를 해결하기위한 해결 방법은 여기에서 논의되었습니다 Android : Samsung Galaxy Tabs and Android 2.2 Devices Showing GPS date 1 Day Advance from 1st jan 2012

0

UTC는 GPS에서 파생되지 않고, APK는 GPS보다 우선합니다. Android가 GPS 시계를 무시하도록 설정되었습니다. 당신은 getTime() NIST입니다. 아니 GPS

+0

이것이 원래 질문에 대한 대답이되어야한다면, 개선해야합니다. – DuncanKinnear

관련 문제