【发布时间】:2017-08-08 06:17:29
【问题描述】:
这是我第一次在 Stackoverflow 上提问,我显然很难回答这个问题。我如何识别用户是否更改了设备的日期以激活基于日期的代码操作?
我真的需要在没有互联网连接的情况下比较实际日期和设备日期。
例如: 当我点击这个按钮时,它只会在 8 月 29 日打开。更改日期将允许我访问按钮的功能。
【问题讨论】:
这是我第一次在 Stackoverflow 上提问,我显然很难回答这个问题。我如何识别用户是否更改了设备的日期以激活基于日期的代码操作?
我真的需要在没有互联网连接的情况下比较实际日期和设备日期。
例如: 当我点击这个按钮时,它只会在 8 月 29 日打开。更改日期将允许我访问按钮的功能。
【问题讨论】:
您可以使用网络时间协议。它提供了网络时间和日期,因此用户更改电话日期不会欺骗它。
Google 有一个开源地址:This link
编辑
提供此代码作为示例:
SntpClient client = new SntpClient();
if (client.requestTime("time.foo.com")) {
long now = client.getNtpTime() + SystemClock.elapsedRealtime() - client.getNtpTimeReference();
}
它把time.foo.com 放在哪里,你应该把time.google.com 放在哪里。您可能需要以毫秒为单位的超时才能添加到 requestTime(host,timeout_millis) 方法。
对于 NTP 服务器,您可以使用
time.google.com
提供Here
【讨论】:
如果您可以确保在安装您的应用时它具有正确的时间,那么您可以实现一个侦听器以了解手动时钟更改,然后执行您想做的事情。参考:Is there a way to detect when the user has changed the clock time on their device?。
还有 2 个选项,一个是使用 GPS 获取时间,另一个是从网络获取时间。不太确定网络,当我有机会时,它是与 NTP 相关的东西。让我知道您的实施情况。
【讨论】: