2011-11-07 77 views
3

我正在爲Android編寫應用程序。我需要允許我的用戶捕獲他們當前的位置&記錄發生的日期/時間。問題在於日期/時間不能通過調整設備上的日期/時間來改變。Android - 網絡日期/時間

您是否可以指出我使用位置服務獲取蜂窩網絡日期/時間的正確方向,以及如何獲取GPS日期/時間。

任何幫助表示讚賞,謝謝!

+1

你的日誌信息的服務器端?如果是這樣,只需使用服務器日期/時間。 – Brad

+0

我們正在這樣做,但要求實際上來自政府。他們的要求是使用「GPS信號日期/時間」或「蜂窩網絡日期/時間」(取決於如何檢索位置)。我們有一個類似的問題瓦特/我們的iPhone應用程序...但我不是那個開發:) – Chris

+0

我會用一個GPS連接到服務器。如果你沒有延遲上傳,這將很難被篡改。 – Brad

回答

3

可以通過在Android位置API中使用LocationListener來檢索GPS或網絡時間戳。

見一個完全工作的例子開源GPSTest項目: https://github.com/barbeau/gpstest

您可以要求聽任何網絡位置更新:

lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);

或GPS位置更新:

lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

然後,當一個位置被傳遞到LocationListener.onLocationChanged方法,你可以從該位置讀取時間戳:

@Override 
public void onLocationChanged(Location location) { 
    Log.i("Timestamp", "New timestamp: " + location.getTime()); 
} 

另一種選擇是讓一個網絡時間協議(NTP)服務器,它是一個請求完全獨立於設備和小區網絡。

看到這個職位的詳細信息,實現NTP客戶端

use of ntp service

0
public static final String TIME_SERVER = "time-a.nist.gov"; 
public static void printTimes() throws IOException { 
     NTPUDPClient timeClient = new NTPUDPClient(); 
     InetAddress inetAddress = InetAddress.getByName(TIME_SERVER); 
     TimeInfo timeInfo = timeClient.getTime(inetAddress); 
     //long returnTime = timeInfo.getReturnTime(); //local device time 
     long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime(); //server time 

     //Get Current Time 
     Long tsLong = System.currentTimeMillis()/1000; 
     String ts = tsLong.toString(); 
     Log.e("After get PrintTime..","After get PrintTime..>>"+ts); 

    enter code here 
     Log.e("getCurrentNetworkTime", "Time from " + TIME_SERVER + ": " + returnTime/*time*/); 

    }