Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android获取实际时间(当互联网关闭且设备时间不正确时)_Android_Android Date - Fatal编程技术网

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

Android获取实际时间(当互联网关闭且设备时间不正确时),android,android-date,Android,Android Date,根据问题所述,我需要实际时间。例如,在我的应用程序中,我必须在国家时间上午8点向所有用户显示一个特定的弹出窗口。应用程序在特定国家/地区运行。如果设备时间不正确怎么办?我可以通过api获取时间。如果设备没有interenet怎么办? 当我上网的时候,我正在考虑追踪时间。例如,如果我上网,我点击一个api来获取时间并存储时间来跟踪它。还有其他解决方案吗?这个解决方案怎么样: ? 但这需要GPS接收机。您需要使用UTC。如果您真的需要,我会让应用程序记录安装时的UTC时间(您知道用户此时有互联网,因

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

这个解决方案怎么样: ?


但这需要GPS接收机。

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

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


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

如果设备中设置的时间错误,则无法获取实际时间戳

编辑:- 只有一个解决方案,我可以通过电话上网找到:-

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

我认为这种情况没有任何解决办法。在这种情况下,不仅是你的,而且每一个依赖于时间的应用程序都无法正常运行。你真的想在霍格沃茨之外使用魔法吗?你不怕摄魂怪吗?你想从什么来源获得时间?使用什么频道?“你不能用神奇的方式得到正确的时间。”弗拉德马特维延科哈哈哈。击球手的答案是获取gps时间,从sime获取时间,跟踪特定间隔后的时间。我在找一个有逻辑答案的程序员。但幸运的是,我在这里找到了一位哈利·波特迷。这是我说你应该以更正确的方式定义你的需求的方式。获取初始时间记录,然后使用本地循环间隔自己计算的想法似乎是可以的,打赌会有问题。首先,如果我下载应用程序,关闭互联网,运行应用程序-现在无法获得初始时间记录。第二,如果没有互联网,我们就不能同时使用设备,因为这可能是错误的(假设它总是错误的)。从我的角度来看,解决方案是——如果应用程序的目的是在特定的时间做一些事情,并且需要用户身份验证,那么我们在登录时将100%拥有互联网,这样我们就解决了第一个问题,我们现在从互联网上获得了正确的初始时间记录。至于第二个问题,可以创建一个始终处于活动状态的后台服务,它的唯一任务是每隔几秒钟计算秒数(postDelayed或其他方法),这将起作用。然而,实例化一个完整的后台服务,即使是一个小的,也是一件沉重的事情,我不想这样做。