|
||
|
![]() |
![]() |
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
![]() |
|
Herramientas |
#1
|
||||
|
||||
getLastLocation desde IntentService
Buenas.
Pues mi duda está clara, tengo un intentservice el cual me descarga unos datos de internet, pero necesita la localización. El problema es que parece que el service termina el ciclo de vida antes de que el método onConnected() sea llamado. Vamos, antes de que el LocationClient tenga la conexión. He pensado en crear una alarma si el objeto Locatoin es null, para que se ejecute de nuevo a los pocos segundos. Pero no sé si esto será lo adecuado. Aparte de que tengo una actividad que tiene una progressbar en otra actividad (que puede estar abierta o no cuando se ejecute el IntentService) la cual se muestra cuando el servicio se ejecuta, y desaparece cuando termina. Así que busco algún consejo sobre cómo sería la mejor forma de hacerlo. Gracias por adelantado. Pd: He seguido el tutorial de Android Developers: http://developer.android.com/intl/es...e-current.html |
|
#2
|
||||
|
||||
El IntentService termina cuando termina el onHandleIntent (salvo que se haya puesto a ejecutarse otro IntentService igual antes de que ese IntentService termine, en ese caso caso se volverá a ejecutar el onHandleIntent otra vez para el Intent nuevo), es decir, antes de que se ejecute el onConnected porque el código del LocationClient se ejecuta cuando el onHandleIntent termina.
Es un poco lioso, pero llevo 2 semanas peleándome con IntentServices y los tengo bastante trillados. Yo tengo que hacer una cosa parecida, necesito una respuesta de un BroadcastReceiver para continuar la ejecución, y lo que hago es lo siguiente: Creas un AtomicBoolean a nivel global, lo inicias a false, y justo después de iniciar el LocationClient haces: do { Thread.sleep(1000); } while (!gpsIniciado.setAndCompare(true,false); Y en el onConnected haces: gpsIniciado.set(true); De todas formas aún con todo esto, no se si el IntentService es lo más apropiado para lo que quieres hacer, sin conocer en detalle tu aplicación es muy probable que con un AsyncTask sea suficiente. |
#3
|
||||
|
||||
Entiendo lo que me dices. El problema del sleep es que me bloquearía la UI.
Al final debo de hacerlo desde un service, ya que se puede ejecutar tanto desde una actividad, con un botón que activaría el usuario, como periódicamente y en 2o plano. Y ahí creo que no encajaría una asynctask. Y aparte de los Services, no se de qué otra forma podría hacerlo. |
#4
|
||||
|
||||
Al final creo que voy a olvidarme del IntentService, y lo haré con un Service.
|
![]() |
![]() |
||||||
|