简体   繁体   中英

Android - Network Date/Time

I'm in the process of writing an app for Android. I need to allow my users to capture their current location & log the date/time that this happened. The catch is that the date/time cannot be something that the user can change by adjusting the date/time on their device.

Can you point me in the right direction for obtaining the Cellular Network date/time when using location services for towers, and also how to obtain the GPS date/time.

Any help is appreciated, thank you!

GPS or Network timestamp can be retrieved by using the LocationListener in the Android Location API.

See the open-source GPSTest project for a fully working example: https://github.com/barbeau/gpstest

You can request to listen to either Network location updates:

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

or GPS location updates:

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

Then, when a location is passed into the LocationListener.onLocationChanged method, you can read the timestamp from that location:

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

Another option is to make a request to a Network Time Protocol (NTP) server, which is completely independent of the device and cell network.

See this post for details on implementing an NTP client:

use of ntp service

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

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM