Llamada de escucha de la ubicación de Android muy a menudo
Estoy utilizando el proveedor de ubicación de red. Necesito llamar al método onLocationChanged desde mi LocationListener sólo una vez por 1 hora. Aquí está mi código:
MyLocationListener locationListener = new MyLocationListener(); locationMangaer.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3600000, 0,locationListener);
Pero no funciona. Mi onLocationChanged
llamando muy a menudo.
- Map.setmylocationenabled (true) no funciona
- Servicios de Google Play o Servicios de ubicación de Android
- ¿Cuál es el nombre de la carpeta "valores" para el idioma danés?
- Google.Play interfaz web hl parámetro para el idioma árabe
- Cómo eliminar fácilmente los recursos de localización innecesarios de bibliotecas añadidas en la versión APK
¿Qué parámetros debo utilizar?
- "Auth_client_using_bad_version_title" se traduce aquí pero no se encuentra en la configuración predeterminada
- Cómo obtener programaticamente lista de idiomas compatibles en un proyecto de Android (dispositivo NOT)
- Notificación si el usuario está cerca de la ubicación
- Valores locales de chino-zh_CN dan un error en Eclipse
- Cambio de idioma en tiempo de ejecución Android
- Google Translator Toolkit para Android e iOS: cómo subir las traducciones existentes?
- Cualquier herramienta / sitio web colaborativo para localizar una aplicación de Android?
- ¿Cómo se puede localizar nodpi extraíble?
De la documentación LocationManager#requestLocationUpdates()
:
Antes de Jellybean, el parámetro minTime era sólo una pista, y algunas implementaciones de proveedores de ubicación lo ignoraban. Desde Jellybean y en adelante es obligatorio para los dispositivos compatibles con Android observar tanto los parámetros minTime como minDistance.
Sin embargo, puede utilizar requestSingleUpdate()
con un Looper y Handler para ejecutar las actualizaciones una vez por hora.
Adición
Para empezar, puede leer más sobre Loopers y Handlers aquí .
Está utilizando API 8 que es una buena opción, pero esto limita los métodos de LocationManager que podemos llamar ya que la mayoría se introdujeron en la API 9. La API 8 sólo tiene estos tres métodos:
requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener) requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener, Looper looper) requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent)
Vamos a usar el primer método, es el más simple.
Primero, cree su LocationManager y LocationListener como lo haría normalmente, pero en onLocationChanged()
deje de solicitar más actualizaciones:
@Override public void onLocationChanged(Location location) { mLocationManager.removeUpdates(mLocationListener); // Use this one location however you please }
En segundo lugar, crear un par de nuevas variables de clase:
private Handler mHandler = new Handler(); private Runnable onRequestLocation = new Runnable() { @Override public void run() { // Ask for a location mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mLocationListener); // Run this again in an hour mHandler.postDelayed(onRequestLocation, DateUtils.HOUR_IN_MILLIS); } };
Por supuesto, deberías desactivar todas tus devoluciones de llamada en onPause()
y habilitarlas de nuevo en onResume()
para evitar que el LocationManager onResume()
recursos al adquirir actualizaciones no utilizadas en segundo plano.
Un punto más técnico:
Si está preocupado por bloquear el subproceso de interfaz de usuario con LocationManager, puede utilizar el segundo método requestLocationUpdates()
para proporcionar un Looper específico a partir de un nuevo Thread (por ejemplo, un HandlerThread).
- Seleccione sólo un botón de radio a la vez en la vista de lista personalizada, android
- Establecer un elemento de escucha de clic largo en GridView