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:
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
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.
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With