Spanish llamar a un servicio y esperar a que termine [SOLUCIONADO]

edgar_ortiz

Active Member
Licensed User
Longtime User
[email protected],

Necesito llamar a un servicio, el cual asigna valores a unas variables globales y esperar a que termine, para así mostrar la información en la "actividad"

Cualuier idea es bienvenida

Saludos,

Edgar
 

edgar_ortiz

Active Member
Licensed User
Longtime User
Buenas Edgar:

Algo así?


saludos,

Mi estimado José,

Gracias de antemano por tu tiempo.

Te comento:
- Ya revisé ese post y NO entiendo como implementarlo
- Tengo un app, donde el usuario en múltiples transacciones, puede darle click a un botón para obtener la posición GPS, así que en el "click" del botón, llamo al servicio (esto funciona BIEN), el problema es que a veces el "flujo" del programa continua y el servicio aun NO a podido determinar la posición GPS.
- Adjunto un proyecto que ejemplifica el problema

Reitero el agradecimiento,

Saludos,

Edgar
 

Attachments

  • Test_Wait_Service.zip
    11.9 KB · Views: 13

José J. Aguilar

Expert
Licensed User
Hola Edgar:

No he tenido hoy mucho tiempo para echarle un ratillo, lo he visto así por encima, pero me surge una duda.
Es un proceso corto, ¿necesitas llamarlo desde un servicio?
Has visto cómo lo hace Erel en este ejemplo?
Llama a la sub, aparece un mensaje de espera y muestra el resultado cuando lo obtiene
 

edgar_ortiz

Active Member
Licensed User
Longtime User
Hola Edgar:

No he tenido hoy mucho tiempo para echarle un ratillo, lo he visto así por encima, pero me surge una duda.
Es un proceso corto, ¿necesitas llamarlo desde un servicio?
Has visto cómo lo hace Erel en este ejemplo?
Llama a la sub, aparece un mensaje de espera y muestra el resultado cuando lo obtiene
José,

Me gustó el ejemplo, mi problema es que necesito el servicio, porque se utiliza en varias transacciones y dependiendo de la transacción se hacen distintos cálculos que no incluí en el proyecto de ejemplo (Calculo de distancias, acceso a base de datos, envío de información a un servidor, etc.)

Saludos,

Edgar
 

drgottjr

Well-Known Member
Licensed User
Longtime User
' La duda es: Como sé que ya TERMINÓ
la respuesta es: no lo sabes

tu StartServiceAndWait() no sirve mas que para anunciar
que algo esta "listo para servir". no tiene nada que
ver con el estado del servicio despues.

no sirve para indicar que las coordinadas han sido captadas. necesitas
otra funcion que funciona igual que ejecutas cuando las coordinadas se
conozcan. Es esa funcion para que a que vas a esperar.

si has usado la clase CamEx de erel para manejar la camara, sabras
que hay una Camera_Ready funcion. solo quiere decir que la
camara esta initializada para sacar fotos. no tiene nada que ver con
la toma de fotos. para esto hay otra funcion Camera_PictureTaken
(o sea, foto sacada). cuando la camara saca una foto, usarias
wait for Camera_PictureTaken, no wait for Camera_Ready.

por ejemplo, y si leo bien tu codigo, en la funcion
FusedLocationProvider1_LocationChanged(Location1 As Location)
podrias poner despues de: Log("GPS_Manual -> FusedLocationProvider1_LocationChanged END")
CallSubDelayed2(Main, "Service_Completed", "Location updated")

y en main:
wait for Service_Completed( Message as String)

prueba el ejemplo adjunto. si comprendo tu duda, creo que el ejemplo espera a que termine la localizacion. ya nos diras.
 

Attachments

  • edgar.zip
    12 KB · Views: 17

edgar_ortiz

Active Member
Licensed User
Longtime User
' La duda es: Como sé que ya TERMINÓ
la respuesta es: no lo sabes

tu StartServiceAndWait() no sirve mas que para anunciar
que algo esta "listo para servir". no tiene nada que
ver con el estado del servicio despues.

no sirve para indicar que las coordinadas han sido captadas. necesitas
otra funcion que funciona igual que ejecutas cuando las coordinadas se
conozcan. Es esa funcion para que a que vas a esperar.

si has usado la clase CamEx de erel para manejar la camara, sabras
que hay una Camera_Ready funcion. solo quiere decir que la
camara esta initializada para sacar fotos. no tiene nada que ver con
la toma de fotos. para esto hay otra funcion Camera_PictureTaken
(o sea, foto sacada). cuando la camara saca una foto, usarias
wait for Camera_PictureTaken, no wait for Camera_Ready.

por ejemplo, y si leo bien tu codigo, en la funcion
FusedLocationProvider1_LocationChanged(Location1 As Location)
podrias poner despues de: Log("GPS_Manual -> FusedLocationProvider1_LocationChanged END")
CallSubDelayed2(Main, "Service_Completed", "Location updated")

y en main:
wait for Service_Completed( Message as String)

prueba el ejemplo adjunto. si comprendo tu duda, creo que el ejemplo espera a que termine la localizacion. ya nos diras.

drgotjr,

Gracias, funciona BIEN, estoy ejecutando el
CallSubDelayed2(Main, "Service_Completed", "Location updated")
en el "Service_Destroy" por la prisa no puse que siempre deberá de efectuarse un "StopService"

Saludos,

Edgar
 
Top