Android - 网络日期/时间

时间:2011-11-07 17:43:10

标签: android date time gps location

我正在为Android编写应用程序。我需要允许我的用户捕获他们当前的位置和记录发生这种情况的日期/时间。问题在于日期/时间不能通过调整设备上的日期/时间来改变用户。

您能否指出我在使用塔楼位置服务时获取蜂窝网络日期/时间的正确方向,以及如何获取GPS日期/时间。

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:4)

可以使用Android Location 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

答案 1 :(得分: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*/);

    }