2014-11-11 12 views
0

Я работаю над получением текущего местоположения через GPS. Но GPS всегда дает мне последнее сохраненное место! Возможно, это из-за этой линии! Я ищу лучшее решение!Android: GPS дает последнее сохраненное местоположение

местонахождениеManager .getLastKnownLocation (LocationManager.GPS_PROVIDER);

Вот пример кода

if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 

Заранее спасибо!

+0

да, потому что вы используете getLastKnownLocation, который возвращает последнее известное местоположение –

+0

Прамоды, чтобы получить расположение от LocationManager существует только «locationManager.getLastKnownLocation()». Andi вы можете использовать 'LocationManager.NETWORK_PROVIDER' вместо 'LocationManager.GPS_PROVIDER'. –

+0

@NikitaShah Я попробовал LocationManager.NETWORK_PROVIDER тоже ... но это также не сработало. –

ответ

0

Если вы используете

locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); 

он будет возвращать только последнее место, сохраненное с помощью GPS внутренне.

, поскольку вы уже добавили listner, вы можете получить следующее измененное местоположение в функции переопределения onLocationChanged, которая будет находиться в ближайшем месте.

Там нет никакого способа, чем это нужно ждать, пока функция onLocationChanged будет автоматически запускаются ...

0

Простое внедрение для вас, что вам нужно принять для местоположения слушателя

Не забудьте добавить разрешение

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 

Вы можете получить частые обновления изменения местоположения в поле ниже слушателя.

private final LocationListener mLocationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(final Location location) { 
     //your code here 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
    } 
}; 

вы должны зарегистрирован он в на создание

protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

      mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, 
        LOCATION_REFRESH_DISTANCE, mLocationListener); 
       //first time you can take the value from the lastKnown location 
       if (locationManager != null) { 
       Location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 

} 
0

Проверьте этот код, он поможет вам.

// flag for GPS status 
boolean isGPSEnabled = false; 

// flag for network status 
boolean isNetworkEnabled = false; 

// flag for GPS status 
boolean canGetLocation = false; 

Location location; // location 
double latitude; // latitude 
double longitude; // longitude 
String address; //Address 

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

// Declaring a Location Manager 
protected LocationManager locationManager; 

public Location getLocation() { 
     try { 
      locationManager = (LocationManager) mContext      .getSystemService(LOCATION_SERVICE); 

      // getting GPS status 
      isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

      // getting network status 
      isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

      if (!isGPSEnabled && !isNetworkEnabled) { 
       // no network provider is enabled 
      } else { 
       this.canGetLocation = true; 
       if (isNetworkEnabled) { 
        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("Network", "Network"); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
       // if GPS Enabled get lat/long using GPS Services 
       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("GPS Enabled", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager 
            .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return location; 
    }