He estado atascado en este problema por bastante tiempo. Estoy trabajando en una aplicación que usa la ubicación bastante extensamente en varias actividades diferentes. Cada ejemplo que he encontrado utiliza un LocationListener por separado en cada actividad. Esto no es factible en mi situación.Android: la mejor forma de implementar LocationListener en múltiples actividades
Me pregunto cuál es la forma más eficiente de realizar un seguimiento de la ubicación del usuario en varias actividades. En este momento, he creado un servicio que implementa LocationListener y usa una transmisión para actualizar latitud estática y campos largos en una clase base de actividad. Esto significa que el servicio siempre se está ejecutando, lo que no es ideal. Pero si apago el servicio y lo reinicio solo cuando lo necesito, toma tiempo obtener una buena ubicación. Necesito los datos de ubicación en Activity onCreate(). Es lo mismo si trato de implementarlo en la clase base de la actividad. Si registro constantemente el oyente en onResume/onCreate y lo anulo en onPause(), lleva demasiado tiempo comenzar a recibir actualizaciones. También traté de crear un servicio al que pudiera vincularme, por lo que solo comienza cuando necesito una ubicación. Pero tengo el mismo problema, lleva demasiado tiempo enlazar al servicio y comenzar a recibir actualizaciones.
El servicio que estoy utilizando ahora funciona, pero de todo lo que he leído, no debería estar utilizando un servicio constantemente en funcionamiento para cosas triviales como esta. Pero el objetivo de la aplicación es proporcionar datos relevantes basados en la ubicación actual del usuario. Así que tengo un servicio que se ejecuta en segundo plano y proporciona actualizaciones periódicamente. El principal problema que me ha llevado a reexaminar el diseño en este momento es que recientemente descubrí que onProviderEnabled() no se llama si el usuario inicia la aplicación sin que el GPS esté encendido y luego lo habilita. En este escenario, la aplicación no tiene forma de reconocer que el GPS estaba habilitado para que pueda comenzar a escuchar las actualizaciones.
Pensé que entendía que LocationManager y LocationListener miraban los ejemplos, pero parece que no puedo aplicarlo a esta situación en la que necesito datos de ubicación en múltiples actividades. Cualquier ayuda o consejo sería muy apreciado.
He estado en este camino antes, pero no sabía que onStart y onStop se superpusieron así. Esto es atractivo para mí y lo probaré y les haré saber lo que se me ocurrirá mañana. ¡Gracias! – d370urn3ur
Solo me preguntaba, ¿cómo funcionaría esto al apagar la pantalla? ¿Sería prudente vincular el servicio en onResume() y UNBIND en onPause() para activarlo/desactivarlo cuando la pantalla se enciende/apaga y funciona cuando las actividades cambian? –
@Grantland Punto válido, ya que la Actividad sigue en primer plano, el Servicio viviría. Si el servicio necesita acelerarse en estas instancias, yo mantendría el enlace igual, pero tendré que registrar un 'BroadcastReceiver' para' Intent.ACTION_SCREEN_ON' y 'Intent.ACTION_SCREEN_OFF' para apagar los componentes pesados como el GPS. Mover el mecanismo de enlace a onPause()/onResume() hace que el servicio posiblemente se detenga/reinicie a menudo durante el uso de la aplicación, ya que esas devoluciones de llamada nunca se superponen, lo que permite que el servicio caiga en un estado desacoplado con frecuencia. – Devunwired