Spanish Ejecutar un servicio de forma intermitente [solucionado]

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola a todos.

Deseo crear un servicio que cada 'n' segundos se conecte con un servidor y solicite información para saber si hay pedidos.

Ya leí los tutoriales de estos links:

Intent Filters - Intercepting SMS messages in the background
https://www.b4x.com/android/forum/t...cepting-sms-messages-in-the-background.20103/

Automatic Foreground Mode:
https://www.b4x.com/android/forum/threads/automatic-foreground-mode.90546/

Pero mi inglés es deficiente y aunque entiendo la mayoria del texto, supongo que algo no me ha quedado claro.

Ya sé que al iniciarse la aplicación, Android automáticamente inicia los servicios en modo AutomaticForegroundMode

También entendí que no es necesario emplear la orden StartServiceAt por que el servicio nunca finaliza, (Solo en casos raros), porque Android vuelve a correr el servicio de forma automática, en caso que el servicio se haya cerrado, por que tampoco es necesario:

B4X:
#StartCommandReturnValue: android.app.Service.START_STICKY

Lo unico que he entendido hasta ahora es que hay que agregar la linea Service.StopAutomaticForeground a Service_Start para poder emplear StartServiceAt.

Aunque de esa forma el programa funciona "Bien". ¿No es absurdo hacerlo de esta forma si el servicio se esta ejecutando siempre?

Escribí dentro de un servicio las siguientes lineas

B4X:
Private Sub Service_Start (StartingIntent As Intent)
    ToastMessageShow ("RUNNING...", False)
    Log(">>> " & DateTime.GetSecond(DateTime.Now))
End Sub

Pero el mensaje "RUNNING...", solo aparece una única vez.

A pesar de seguir las instrucciones y que el programa funciona, el Log sigue mostrando el mensaje de error

Lo que mas me molesta es el mensaje The Starter service should never be strated from a receiver.



¿Entonces, como hago para ejecutar un servicio cada 'n' segundos, de forma correcta?

Saludos
 
Last edited:

Gabino A. de la Gala

Well-Known Member
Licensed User
Longtime User
¿Pero finalmente lo hiciste con un timer?

Yo lo tengo similar a lo que tu ponías en el ejemplo inicial y me funciona:

Sub Service_Start(StartingIntent As Intent)
' Lo lanzo para que se repita cada 15 minutos
StartServiceAt("", DateTime.Now + (15 * DateTime.TicksPerMinute), True)
End Sub

Lo que NO tengo son las dos lineas finales que pones en las que parece que "detienes" el servicio.
 

carlos7000

Well-Known Member
Licensed User
Longtime User
¿Pero finalmente lo hiciste con un timer?

Yo lo tengo similar a lo que tu ponías en el ejemplo inicial y me funciona:

Lo que NO tengo son las dos lineas finales que pones en las que parece que "detienes" el servicio.

Hola.

El código quedo así:

B4X:
Sub Service_Start (StartingIntent As Intent)

.
.
.
.

    StartServiceAt(Me, DateTime.Now + 30 * 1000, True)
    Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub

Así si me funcionó.
 

Xicu

Active Member
Licensed User
Longtime User
Gracias por tu respuesta Carlos7000. A pesar de esta, me quede con la espinita de probar con un timer en el starter service y parece funciona. No lo he probado en un movil real, pero en el emulador responde correctamente

Pero sigo teniendo mis dudas si es ortodoxo hacerlo asi, y por ello lo he planteado en el hilo del foro ingles que iniciaste en su momento, a ver si alguien lo corrobora o no

https://www.b4x.com/android/forum/threads/execute-a-service-every-n-seconds-solved.97724/.
 

Attachments

  • StarterTimer.zip
    405 KB · Views: 404
Top