Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sync Android devices via GPS time?

Tags:

Short version:

Problem: I need several Android devices to do something at the exact same time (within ca 100 milliseconds). For example, I want all devices to play a certain sound at previously determined point in time.

Question: Could I use GPS time to make sure the devices clock's are synced?

Longer version:

Several people having Android devices are in the same outdoor location (for some specific sports event). All devices should signal certain events at the exact same time. (What time will be determined before hand and it is not important that they do it at exactly that time, as long as they do it at the same time). FWIW: those events will help the people to start their sporting activity at the same time.

Here are assumptions I can make:

  • There may or may not be cell coverage. (It is outdoors and may be far of urban areas)
  • The devices may or may not be connected to the internet. (Some people might not have a data plan)
  • Devices can talk to each other. If the devices are not connected to the internet they will be connected via wifi (though the wifi may not have an internet gateway).
  • The devices are outside (and not inside buildings). (That's good, it means all devices can get a GPS fix)
  • The devices are physically close to each other (i.e., within 300 m2). (Not sure if that's important)

I cannot use the internal clock to know when to play events: users can manually change the time and even if a device is set to get the time from a cellular network, that network might not provide the exact right time. Two devices might be booked into different networks and hence their time might not be synced very well.

At app startup, each device could ask for a GPS fix and save the difference between the GPS time and its internal clock. Now the master could announce events based on this GPS time (by using it's internal clock and substracting the offset it saved earlier).

Will this be precise enough and reliable?

Many thanks in advance, Andreas Leitner

like image 236
user1057534 Avatar asked Nov 21 '11 10:11

user1057534


People also ask

Can you get time from GPS?

By tracking a GPS satellite, a receiver can record the time differences between its own receiver clock and the satellite clock, e.g. UTCBrussels - GPS time.

What is GPS synchronization?

GPS synchronization enables measurement systems to make synchronized measurements over extremely large areas. GPS provides a method of sharing timing signals without the need to run timing cables to each measurement system.


2 Answers

You can get the time difference in milliseconds from currentTimeMillis() and Location.getTime() in the onLocationChanged() callback. Use requestSingleUpdate()


I just want to add that, if the user has a data connection they can use NTP time, which is even more accurate, as the GPS internal clock might drift and correcting it takes a while.


EDIT: I want to edit this answer. After working as a GNSS developer in Android OS I realized that many 'major' Android OEMs have messed this up. Usually NMEA sentences are generated at the chipset or GNSS stack. Sometimes the time is right, it depends on the implementation.

Also there is a problem of leap second. GPS time is not UTC time. And as of this writing it is 18 seconds ahead.

Also GPS time fromLocation objects are now system time as per the documentation

TLDR : use NTP time

like image 191
Reno Avatar answered Sep 17 '22 12:09

Reno


You cannot rely totally on the GPS time as there is a known issue for some devices that the time retrieved for some devices is one day ahead. In that case you might get a big offset.

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

A workaround for solving this issue has been discussed here: Android : Samsung Galaxy Tabs and Android 2.2 Devices Showing GPS date 1 Day Advance from 1st jan 2012

like image 30
muneikh Avatar answered Sep 17 '22 12:09

muneikh