Получение времени GPS может быть довольно запутанным! Чтобы расширить обсуждения в принятом ответе, getTime () в обратном вызове onLocationChanged () дает разные ответы в зависимости от того, как расположение
(не обязательно GPS) информация извлекается, (на основе тестирования Nexus 5):
(a) Если используется Google FusedLocationProviderApi (API Google Location Services), тогда getProvider () вернет 'fused', а getTime () вернет время устройств (System.currentTimeMillis ( ))
(b) Если используется Android LocationManager (API определения местоположения Android), то в зависимости от настроек телефона «location» и настроек requestLocationUpdates (LocationManager.NETWORK_PROVIDER и / или LocationManager. GPS_PROVIDER), getProvider () вернет:
- Либо «сеть», в этом случае getTime () будет возвращать время устройства (System.currentTimeMillis ()).
- Или, «gps», в этом случае getTime вернет время GPS (спутник).
По существу: «fused» использует GPS и Wi-Fi / сеть, «network» использует Wi-Fi / сеть, «gps» использует GPS.
Таким образом, чтобы получить время GPS, используйте Android LocationManager с параметром requestLocationUpdates, установленным в LocationManager.GPS_PROVIDER. (Обратите внимание, что в этом случае часть миллисекунд getTime () всегда равна 000)
Вот пример использования Android LocationManager (Android Location API):
public void InitialiseLocationListener(android.content.Context context) {
android.location.LocationManager locationManager = (android.location.LocationManager)
context.getSystemService(android.content.Context.LOCATION_SERVICE);
android.location.LocationListener locationListener = new android.location.LocationListener() {
public void onLocationChanged(android.location.Location location) {
String time = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS").format(location.getTime());
if( location.getProvider().equals(android.location.LocationManager.GPS_PROVIDER))
android.util.Log.d("Location", "Time GPS: " + time); // This is what we want!
else
android.util.Log.d("Location", "Time Device (" + location.getProvider() + "): " + time);
}
public void onStatusChanged(String provider, int status, android.os.Bundle extras) {
}
public void onProviderEnabled(String provider) {
}
public void onProviderDisabled(String provider) {
}
};
if (android.support.v4.content.ContextCompat.checkSelfPermission(context,
android.Manifest.permission.ACCESS_FINE_LOCATION) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
android.util.Log.d("Location", "Incorrect 'uses-permission', requires 'ACCESS_FINE_LOCATION'");
return;
}
locationManager.requestLocationUpdates(android.location.LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
locationManager.requestLocationUpdates(android.location.LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
// Note: To Stop listening use: locationManager.removeUpdates(locationListener)
}