Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-网络日期/时间_Android_Date_Time_Gps_Location - Fatal编程技术网

Android-网络日期/时间

Android-网络日期/时间,android,date,time,gps,location,Android,Date,Time,Gps,Location,我正在为Android编写一个应用程序。我需要允许我的用户捕获他们的当前位置并记录发生这种情况的日期/时间。问题是,日期/时间不能是用户可以通过调整设备上的日期/时间来更改的 您能否为我指出在使用塔台定位服务时获取蜂窝网络日期/时间的正确方向,以及如何获取GPS日期/时间 非常感谢您的帮助,谢谢 可以使用Android Location API中的检索GPS或网络时间戳 有关完整的工作示例,请参见开源GPSTest项目: 您可以请求侦听以下任一网络位置更新: lm.RequestLocatio

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

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


非常感谢您的帮助,谢谢

可以使用Android Location API中的检索GPS或网络时间戳

有关完整的工作示例,请参见开源GPSTest项目:

您可以请求侦听以下任一网络位置更新:

lm.RequestLocationUpdate(LocationManager.NETWORK\u提供程序,0,0,此)

或GPS位置更新:

lm.requestLocationUpdates(LocationManager.GPS\u提供程序,0,0,this)

然后,当一个位置被传递到LocationListener.onLocationChanged方法时,您可以从该位置读取时间戳:

@Override
public void onLocationChanged(Location location) {
    Log.i("Timestamp", "New timestamp: " + location.getTime());
}
另一种选择是向网络时间协议(NTP)服务器发出请求,该服务器完全独立于设备和蜂窝网络

有关实现NTP客户端的详细信息,请参阅本文:


您是否在服务器端记录信息?如果是这样,只需使用服务器日期/时间。我们正在这样做,但要求实际上来自政府。他们的要求是使用“GPS信号日期/时间”或“蜂窝网络日期/时间”(取决于检索位置的方式)。我们的iPhone应用程序也有类似的问题。。。但我不是这方面的开发人员:)我会使用连接到服务器的GPS来实现这一点。如果你没有延迟上传,篡改就更难了。但是你知道有没有办法检索手机网络日期/时间和/或GPS卫星日期/时间?没有,我没有(这就是为什么我没有在下面填写答案的原因)。我只是建议另一种选择,万一没有人提出正确的答案。
 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*/);

    }