Android - 不依赖设备时钟获取当前时间

10
我注意到System.currentTimeMillis()的时间与设备相关。如果我更改设备时钟的时间,这个方法将返回不同的答案。
例如:如果现在的真实时间是10:00,而我把设备上的时钟改成了9:30,那么System.currentTimeMillis()将返回9:30的时间(以毫秒为单位)。
我也尝试过this answer和其他一些答案,但没有找到有用的信息。
我应该说明,我的应用程序大多数情况下是离线工作的。
有没有办法获得真实的当前时间(与设备无关),而不使用外部API?

已编辑。希望更好了。 - Aviv Ben Shabat
2个回答

8
如果没有“离线”部分的话,我建议使用时间服务器,但考虑到您的应用程序大多数时间都处于离线状态,这可能不是一个好的解决方案。
如果您不需要实际时间,而只需要一个不能被搞乱的时间,您可以使用SystemClock.elapsedRealtime(),它会给出自设备上次启动以来的时间。
您还可以将时间服务器和SystemClock.elapsedRealtime()结合起来:从计时器服务器获取时间一次(例如,在启动后),然后从那时开始将elapsedRealtime()添加到该初始值中(减去您获取计时器服务器值时的elapsedRealtime值)。

如果这个时钟在设备关闭后不重置的话,那将非常有帮助。我想我必须使用一个时间服务器了。谢谢。 - Aviv Ben Shabat
1
不客气。也许你可以将它们结合起来。在启动后从计时器服务器获取时间一次,然后从那时起将elapsedRealtime()添加到初始值中(减去获取计时器服务器值时的elapsedRealtime值)。 - Ridcully

4
如果您使用GPS位置提供程序,则 getTime()将返回从GPS信号推导出的UTC时间,而不是设备时间。 GPS位置提供程序可以离线工作,但与在线时访问A-GPS信息相比,获取固定位置速度要慢得多。

另一个很好的答案,但不幸的是我不能使用它,因为向用户解释这个权限的必要性会很困难。 - Aviv Ben Shabat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接