Is there a clock in devices that returns always a certain time, independent from user time settings and internet connection?
Such a time would be very helpful when checking if a license has expired.

- 2,590
- 2
- 18
- 28
-
it is pretty hard without internet connection , you can save a time with Shared Preferences , when the user will open the app , if he has internet connection then a simple call will be done and the licence will be checked , another check that you can do is also to save the last open date , and at loading you check if date > last_opened_date , if not you can show a warrning message . – Raluca Lucaci Jan 09 '14 at 13:59
3 Answers
Is there a clock in devices that returns always a certain time, independent from user time settings and internet connection?
No, sorry.

- 986,068
- 189
- 2,389
- 2,491
The GPS clock is independent from system clock / time settings and network connection.
You can get a timestamp by requesting a location fix and accessing Location
getTime()
.
Of course, this is not bulletproof for license checking purposes as it can be spoofed as well. @CommonsWare's notes from comments are also worth considering:
Note that this only works on devices that have GPS, where GPS is enabled by the user, where you can get a GPS signal, and for apps where you do not mind asking for the
ACCESS_FINE_LOCATION
permission. Hence, this is not really "always", though it may suffice for many needs.

- 150,114
- 66
- 286
- 303
-
Note that this only works on devices that have GPS, where GPS is enabled by the user, where you can get a GPS signal, and for apps where you do not mind asking for the `ACCESS_FINE_LOCATION` permission. Hence, this is not really "always", though it may suffice for many needs. – CommonsWare Jan 09 '14 at 14:30
-
Thanks, it seems not possible to get offline a reliable time information. – Paradiesstaub Jan 09 '14 at 15:24
There is no time for this usecase. Here is a list of the available types of time in Android:
Three different clocks are available, and they should not be confused:
System.currentTimeMillis() is the standard "wall" clock (time and date) expressing milliseconds since the epoch. The wall clock can be set by the user or the phone network (see setCurrentTimeMillis(long)), so the time may jump backwards or forwards unpredictably. This clock should only be used when correspondence with real-world dates and times is important, such as in a calendar or alarm clock application. Interval or elapsed time measurements should use a different clock. If you are using System.currentTimeMillis(), consider listening to the ACTION_TIME_TICK, ACTION_TIME_CHANGED and ACTION_TIMEZONE_CHANGED Intent broadcasts to find out when the time changes.
uptimeMillis() is counted in milliseconds since the system was booted. This clock stops when the system enters deep sleep (CPU off, display dark, device waiting for external input), but is not affected by clock scaling, idle, or other power saving mechanisms. This is the basis for most interval timing such as Thread.sleep(millls), Object.wait(millis), and System.nanoTime(). This clock is guaranteed to be monotonic, and is suitable for interval timing when the interval does not span device sleep. Most methods that accept a timestamp value currently expect the uptimeMillis() clock.
elapsedRealtime() and elapsedRealtimeNanos() return the time since the system was booted, and include deep sleep. This clock is guaranteed to be monotonic, and continues to tick even when the CPU is in power saving modes, so is the recommend basis for general purpose interval timing.