2011-11-07 14 views
3

私はAndroid用のアプリを作成中です。私は自分の現在の場所をキャプチャできるようにする必要があります&は、これが起こった日時を記録します。キャッチすることは、日時を自分のデバイス上の日付/時刻を調整することによって変更できるものではないということです。Android - ネットワーク日付/時刻

塔の位置情報サービスを使用しているときのセルラーネットワークの日付/時刻を取得するための正しい方向、およびGPSの日付/時刻の取得方法を教えてください。

ご協力いただきありがとうございます。

+1

あなたは、情報サーバ側のログを記録していますか?その場合は、サーバーの日付/時刻を使用してください。 – Brad

+0

私たちはこれをやっていますが、要件は実際には政府のものです。彼らの要件は、(どのように場所が取得されたかに応じて) "GPS信号の日付/時刻"または "セルラーネットワークの日付/時刻"を使用することです。私たちのiPhoneアプリと同様の問題を抱えています...しかし、私はそのための開発者ではありません:) – Chris

+0

私はこれのためにサーバーに接続されたGPSを使用したいと思います。遅延アップロードをしていない場合は、改ざんするのは難しいでしょう。 – Brad

答えて

3

GPSまたはネットワークのタイムスタンプは、Android Location APIのLocationListenerを使用して取得できます。

完全実施例のためのオープンソース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(Network Time Protocol)サーバに要求を作ることですデバイスとセルネットワークとは完全に独立しています。

は、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*/); 

    }