2011-03-09 15 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的定義