GetLastKnownLocation () devuelve siempre la misma ubicación

Estoy tring para obtener la ubicación de la gps / netwrok por el mejor proveedor, pero siempre es volver a la misma ubicación, también puedo ver que en el mapa de google hay una señal a mi ubicación correcta. Por favor alguien puede decirme lo que estoy haciendo mal?

Mi actividad es:

public class MainMenu2 extends Activity implements LocationListener, OnClickListener 

En mi onCreate tengo:

  if(isGooglePlay()){ setContentView(R.layout.menu_2); setUpMapIfNeeded(); } 

Método isGooglePlay:

  private boolean isGooglePlay() { // looks if googlemaps is available int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if(status == ConnectionResult.SUCCESS){ return true; } else{ ((Dialog) GooglePlayServicesUtil.getErrorDialog(status, this, 10)).show(); //Toast.makeText(this, "Google Play is not available", Toast.LENGTH_SHORT).show(); return(false); } }//isGooglePlay 

Método setUpMapIfNeeded:

  private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the map. if (mMap == null) { mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.menu_map)) .getMap(); // Check if we were successful in obtaining the map. if (mMap != null) { // The Map is verified. It is now safe to manipulate the map. mMap.setMyLocationEnabled(true); locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); Criteria criteria = new Criteria(); criteria.setAccuracy(ACCURACY_FINE); provider = locationManager.getBestProvider(criteria, true); if (provider == null){ onProviderDisabled(provider); } locationManager.requestLocationUpdates(provider, 100, 1, this); loc = locationManager.getLastKnownLocation(provider); //---here the privider is "gps" but always the same location---// if (loc != null){ onLocationChanged(loc); } mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); // set Map Type } } }//setUpMap 

Y métodos de anulación:

  @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub LatLng latlng = new LatLng(location.getLatitude(),location.getLongitude()); mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng)); mMap.animateCamera(CameraUpdateFactory.zoomTo(10)); double pLong = location.getLongitude(); double pLat = location.getLatitude(); Latstr = String.valueOf(pLong); Lngstr = String.valueOf(pLat); latitude = pLat; longitude = pLong; } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub Toast.makeText(this, "Please turn ON the GPS", Toast.LENGTH_SHORT).show(); } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override protected void onPause() { super.onPause(); locationManager.removeUpdates(this); } @Override protected void onResume() { super.onResume(); myLatLng = new LatLng(latitude,longitude); CameraUpdate update = CameraUpdateFactory.newLatLngZoom(myLatLng, 15); mMap.animateCamera(update); mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude )).title("Find me here!")); } 

También traté de buscar aquí para similer problema, pero no tengo nada ..

Hay un error con LocationProvider en algunas plataformas como Samsung, Android personalizado construir. Es necesario llamar a este código (que en realidad no hace nada), lo que activa la caché de fondo del teléfono para actualizar su ubicación actual.

Si no me crees, cambia tu posición GPS a una ubicación diferente a unos 200 metros de distancia, carga tu aplicación, no te das cuenta del cambio de ubicación GPS. Ahora, solo tienes que cargar la aplicación de Maps en tu teléfono y de repente tu aplicación mostrará la ubicación actual.

Para hacer esto activar programaticamente estas líneas justo antes de su llamada getLastKnownLocation .

 HomeScreen.getLocationManager().requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(final Location location) { } }); 

Editar

O

Utilice el LocationClient de la nueva api en lugar de LocationProvider.

  • Centro de aplicaciones de Google Maps V2 Ubicación actual en pantalla
  • Android LocationRequest: obtener una devolución de llamada cuando la solicitud caduca
  • Cómo superar la adquisición de señales GPS
  • API de Google Places de Google - PlaceAutocompleteFragment
  • Android: Alerta de proximidad y consumo de batería
  • Determinar la velocidad de un vehículo usando GPS en android
  • Servicio de fondo con oyente de localización en android
  • Calcular la velocidad de una aplicación de navegación sin el método getSpeed ​​()
  • Obtenga la ubicación (coordenadas) periódicamente sin aumentar drásticamente el consumo de la batería
  • Cambiar el modo de ubicación a alta precisión mediante programación Android
  • Android Location Client no puede resolver el método
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.