Android locationManager sigue llamando onLocationChanged después de removeUpdates

Tengo una aplicación que consigue una corrección de ubicación. La aplicación se extenderá a teléfonos de Gingerbread. Una vez que la aplicación obtiene una ubicación, se muestra un mensaje de brindis al usuario. El problema es cuando el usuario se mueve a la siguiente actividad el mensaje de brindis aparece tal vez diez veces más.

Creo que he implementado los ciclos de vida correctamente, por ejemplo

1) obtener un administrador de ubicación en onCreate () 2) crear y pasar un oyente de localización al administrador en onResume () 3) eliminar actualizaciones en onStop ()

Entiendo que puedo evitar este problema en Android> 4.x llamando

mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null); 

Pero tengo que acomodar pan de jengibre así que llamar a una sola solicitud no está en api 2.3.x. Funciona bien en Android 4, pero en el pan de jengibre el método onLocationChanged sigue ejecutando otras 10 veces.

¿Cómo puedo forzar el método onLocationChanged a ejecutar sólo una vez en el pan de jengibre?

Gracias.

[Edit] Me he dado cuenta de que cuando me muevo a la siguiente actividad el onlocationchanged método sigue ejecutando, pero si me muevo a otra actividad, entonces las solicitudes de ubicación se eliminan con éxito

 @Override protected void onStop() { mlocManager.removeUpdates(mlocListener); mlocListener = null; super.onStop(); } @Override protected void onResume() { mlocListener = new MyLocationListener(); if(isCompOptionsReceived == true){ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.GINGERBREAD_MR1) { mlocManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, mlocListener, null); }else{ mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); } } super.onResume(); } private class MyLocationListener implements LocationListener { @Override public void onLocationChanged(Location loc) { //toast message } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }//end of MyLocationListener @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); nfcscannerapplication = (NfcScannerApplication) getApplication(); sIs = savedInstanceState; setContentView(R.layout.entryscreen); mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

El siguiente código debe ejecutarse en el método onPause, no en el onStop

 mlocManager.removeUpdates(mlocListener); mlocListener = null; 

Eso lo arreglará para todas las versiones de Android.

  • La actualización de la ubicación del fondo Android no aparece cuando la pantalla está desactivada
  • Android Compass señala mi ubicación en lugar de norte
  • ¿Cómo acceder al cambio de ubicación en segundo plano para Google Maps android API v2?
  • Más de un proveedor de ubicación al mismo tiempo
  • conexión a internet en pausa después de bloqueo de teléfono android
  • RuntimeException en el análisis de Gson JSON: Error al invocar java.lang.ClassLoader protegido () sin args
  • Cómo obtener el nombre de satélite o el número cuando estamos recibiendo la ubicación a través de GPS en Android?
  • Rotar un ImageView para hacer frente a una posición dada en latitud y longitud
  • Dar localización falsa al emulador de Genymotion
  • ¿Cómo puede obtener una ubicación en android cuando todos los proveedores de ubicación están inhabilitados?
  • ¿Puede Flurry Analytics informar la ubicación del usuario por ciudad en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.