2011-03-09 63 views
1

我的目标是创建一个应用程序的版本,该版本在某个日期过后会过期。我希望时间在一个绝对的日期,而不是相对日期到期,我的应用程序如何知道当前日期是否为当前实际日期?

因此我的应用程序使用使用此代码来检查当前时间:

Calendar nowCalendar = Calendar.getInstance(); 

但是,用户可以操纵这个通过改变其日期&时间设置。

问题: 我的应用程序如何判断用户是否操纵了日期时间? 或 如何判断用户是否设置了“自动”日期时间设置?

你可以建议最简单的方法来检查当前的互联网?

+0

这个到期有多重要?更改手机上的当前时间会影响很多应用程序,例如日历,所以我想大多数用户都不会打扰。也许你可以和一个或几个骗子生活在一起? – vidstige 2011-03-09 15:24:55

回答

8

每次你的应用程序开始或退出时保存当前的日期时间。如果下一次系统日期是较早的值,那么您知道时间已被篡改。

只有拥有互联网接入权限,您才有完美的解决方案。如果这样做,那么有一百万种方法可以缩短时间,甚至可以回拨您的服务器来检查试用许可证是否仍然有效。

检查互联网时间的一种方法是向HTTP服务器发出简单请求。例如谷歌(你应该使用自己的服务器)。

请求:

HEAD/HTTP/1.1 
Host: google.com 

响应:

HTTP/1.1 301 Moved Permanently 
Location: http://www.google.com/ 
Content-Type: text/html; charset=UTF-8 
Date: Wed, 09 Mar 2011 16:04:48 GMT 
Expires: Fri, 08 Apr 2011 16:04:48 GMT 
Cache-Control: public, max-age=2592000 
Server: gws 
Content-Length: 219 
X-XSS-Protection: 1; mode=block 

正如你可以看到所有的HTTP服务器报到的Date标题%1当前系统日期。

但是,再次,这根本就没有关系。如果互联网连接对于您的软件工作至关重要,您可以在您自己的服务器上使用联机许可证检查。如果没有,那么用户可以在使用按钮时关闭其连接。

+0

对于在安装应用程序之前更改系统时间的用户无效。 – gregm 2011-03-09 15:54:40

+0

是的。他们的时钟第一次启动程序时显示的时间是完全不相关的。一旦他们开始,他们将能够在30天内(你的选择)使用它。 - 欺骗这种方法的唯一方法是记下退出程序的时间,下次开始时,他们在最后一次退出后一分钟设置时钟。每次他们开始和关闭程序时都会这样做,这与他们购买Android设备的原因相矛盾:便利。 – vbence 2011-03-09 16:01:45

+0

我希望时间在绝对日期而不是相对日期到期,否则他们可以继续重新安装应用程序。 – gregm 2011-03-09 16:29:51

-1

您可以访问实时抛出网络时间协议。你可以看到Wikipedia的定义