Pregunta

Tengo una aplicación Android. En base a la ubicación geográfica actual del usuario, quiero ir a buscar algunos datos remotos en el fondo y almacenarla. Mi aplicación es:

En concreto intervalo de una alarma de incendios hasta mi servicio. Servicio utiliza una clase anónima a consulta de ubicación actual y registra una devolución de llamada LocationListener. De guardia de onLocationChanged () que inicio los datos remotos traen desde el servidor.

Sin embargo, una vez mi servicio se lleva a cabo el registro de la ubicación utilizando oyente Anonymos clase, devuelve como se espera; ya que no espera a devolución de llamada a suceder antes del acabado. Desde devolución de llamada lleva algún tiempo y hace una llamada al servicio ya ha regresado, que arroja un error que dice:

java.lang.RuntimeException: Handler{43e82510} sending message to a Handler on a dead thread

Lo cual es bastante comprensible. Una solución rápida para mí ahora es que puedo usar getLastKnownLocation de locationManager como que no responde de vuelta por la devolución de llamada; pero lo que si quiero la última ubicación en estos momentos, en una actividad de servicio y no? ¿Cómo puedo esperar para devolución de llamada a suceder y dejar mi servicio vuelva a aparecer.

Además, ¿en qué momento lastKnownlocation se actualiza? Cada GPS registra una nueva ubicación; Qué actualizarlo? Lo que quiero saber es que si no es la última que todavía puede ser cerrado a la última? Como no vi una opción en emulador de Android para configurar el período de tiempo entre las actualizaciones posteriores.

Cualquier ayuda es muy apreciada. Saludos

¿Fue útil?

Solución

pero lo que si quiero la última ubicación en estos momentos, en una actividad de servicio y no?

Lo sentimos, pero eso no es posible, ya sea en un servicio o una actividad. Por ejemplo, si la radio GPS está desactivado, y se le solicita datos de ubicación del GPS, tardará decenas de segundos sólo para obtener una solución, y eso si tienes suerte. Puede que no obtener una solución en absoluto.

¿Cómo puedo esperar para devolución de llamada a suceder y dejar mi servicio vuelva a aparecer.

No puedes. Uno hace lo que dijo que haría:

El uso de getLastKnownLocation locationManager como que no responde de vuelta por la devolución de llamada

Por lo tanto, tener su Service (que es de esperar una IntentService) comprobar para ver si getLastKnownLocation() pasa a tener un valor. Si lo hace, lo utilizan. De lo contrario, el uso de un registerLocationUpdates() PendingIntent que pasará de nuevo el control a su IntentService. Al llegar que Intent, utilice la ubicación y anular el registro de cambios (suponiendo que el período de alarma es agradable y largo, como, por ejemplo, una vez cada hora).

Las cosas se complican si su alarma es una alarma _WAKEUP. A continuación, necesitará tener una WakeLock, por lo que el dispositivo no caer dormido mientras que usted está tratando de obtener un punto de GPS. Sin embargo, es necesario liberar WakeLock que en algún momento, y si no podemos conseguir una posición de GPS ... ummm ... bueno, esa es la parte difícil. Tratando de averiguar una manera limpia y agradable de manejar esto, y su aplicación como un componente reutilizable (por ejemplo, LocationAlarmService), es uno de 18.000 artículos en mi lista de tareas pendientes.

Además, ¿en qué momento lastKnownlocation se actualiza? Cada GPS registra una nueva ubicación; Qué> actualizarlo?

Que yo sepa, sí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top