Android 获取实际时间(当网络关闭且设备时间不正确时)

Android get actual time ( When internet is off and device time is incorrect)

根据问题所述,我需要实际时间。例如,在我的应用程序中,我必须在国家时间上午 8 点向所有用户显示一个特定的弹出窗口。应用程序在特定国家/地区运行。如果设备时间不正确怎么办?我可以通过 api 得到时间。如果设备没有互联网怎么办? 当我上网时,我正在考虑记录时间。例如,如果我有互联网,我会点击 api 来获取时间并存储该时间以跟踪它。还有其他问题吗?

这个解决方案怎么样: GPS-time in Android?

不过这需要 GPS 接收器。

您需要使用 UTC。如果你真的,真的需要这个,我会让应用程序在安装时将时间记录为 UTC(你知道用户此时有互联网,所以你可以利用它)然后让应用程序跟踪这个 UTC 内部。

您可以在应用程序打开时向 UTC 添加秒数,然后本地化该时间是微不足道的。然后,您可以使用设备时间来查看自上次打开应用程序以来已经过了多长时间(每次关闭和打开应用程序时都需要创建一个时间戳)并将该时间转换为秒并将其添加到存储的应用程序中世界标准时间。同样,这次本地化是一件微不足道的事情。我还会在用户打开应用程序时随时检查他们是否有互联网,如果他们有互联网,请获取正确的 UTC 并更新您的更新内部 UTC。

如果您可以获得 运行 的许可并在后台静默计算秒数,这将变得更加容易,并且您可以提供实时通知。它并不完美,但我确信它可以工作。

如果您在设备中设置的时间错误,您将无法获得真正的时间戳..

编辑:- 只有一个解决方案,我可以使用 phone 互联网找到:-

您可以提供来自 public 服务器时间的时间。记得在manifest里加上INTERNET权限。

String TIME_SERVER = "url"; 
NTPUDPClient timeClient = new NTPUDPClient(); 
InetAddress inetAddres=InetAddres.getByName(TIME_SERVER);
TimeInfo timeInfo = timeClient.getTime(inetAddress);
long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); 
Date time = new Date(returnTime);