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

时间:2017-09-14 12:23:59

标签: android android-date

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

3 个答案:

答案 0 :(得分:2)

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

这需要GPS接收器。

答案 1 :(得分:1)

如果您在设备中设置的时间错误,则无法获得实时时间戳。

编辑: - 只有一个解决方案,我发现使用手机上网是: -

您可以从公共服务器时间给出时间。记得在清单中添加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);

答案 2 :(得分:0)

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

当应用程序打开时,您可以在UTC时添加秒数,然后将该时间本地化是微不足道的。然后,您可以使用设备时间查看自上次打开应用程序以来的时间长度(每次应用关闭并打开时您需要创建时间戳)并将该时间转换为秒并将其添加到您的应用程序存储UTC。再次,本地化这个时间是微不足道的。我还会检查用户是否在任何时候打开应用程序都有互联网,如果他们有互联网,请获取正确的UTC并更新内部UTC的更新。

如果您可以获得以静默方式运行并在后台计算秒数的权限,则会变得更加容易,您可以提供实时通知。它并不完美,但我确信它可以奏效。