GPS-время в Android - PullRequest
       20

GPS-время в Android

9 голосов
/ 11 августа 2011

Я ищу способ отображения времени GPS в моем приложении.Какой самый простой способ сделать это?

(Это должно быть время GPS из-за небольшой разницы во времени между временем GPS и внутренним системным временем)

Спасибо

Ответы [ 2 ]

22 голосов
/ 07 апреля 2016

Получение времени 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)
}
8 голосов
/ 11 августа 2011

Всякий раз, когда вы получаете починку от GPS, вызывается метод onLocationChanged. Параметр этого метода является экземпляром Location. Одним из методов этого параметра является getTime, который даст вам то, что вы ищете. Это если я правильно понял, что вы ищете. Подробнее здесь

...