Spanish Abrir aplicacion cada cierto tiempo

piramide

Member
Licensed User
Hola a todos, es posible abrir una aplicacion con un timer. Me sucede que si la app esta abierta me abre otro activity con un mensaje pero si la app esta cerrada es como que no sucede ningun evento. No se si me explico bien. Alguien trabajo con algo como esto?
 

José J. Aguilar

Expert
Licensed User
Una app que no está abierta, puede ser cerrada por el sistema operativo, y por tanto tu timer dejaría de ejecutarse.
Debes hacer esto en un servicio y ponerlo como foreground, para que permita abrir tu app con un callsubdelayed. Aún así el sistema operativo puede cerrar tu servicio, tendrías que programarlo para que volviese a ejecutarse en caso de el sistema operativo lo cerrara con StartServiceAt.

Echa un vistazo al servicio de este ejemplo de Erel:
 

piramide

Member
Licensed User
Hola, gracias por responder. te adjunto el codigo haber si le podes hechar un vistaso.
Solo me funciona de esta manera. Colocando el codigo de desbloqueo y llamando al layouy "2"
B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    
    r.Target = r.GetActivity
    r.Target = r.RunMethod("getWindow")
    r.RunMethod2("addFlags", 6815872, "java.lang.int")
    
    Activity.LoadLayout("2")

End Sub

Esto me funciona solo cauando lo ejecuto en un celular por ej: un samsung. Pero no funciona si ejecuto la app en un xiaomi
 

piramide

Member
Licensed User
este es el servicio:

B4X:
#Region  Service Attributes
    #StartAtBoot: False
    
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim cuenta As Int
    cuenta = 0
    Dim hora As String
    Dim N As Notification
    
    Dim current_min,current_dia,current_control As Int
    Dim current_hor As Int'String
    Dim gloCelular,gloMensaje As String
    
End Sub

Sub Service_Create
    hora = DateTime.Time(DateTime.Now)
    cuenta = 0
End Sub

Sub Service_Start (StartingIntent As Intent)
    cuenta = cuenta + 1
    hora = DateTime.Time(DateTime.Now)
    current_hor = NumberFormat(DateTime.GetHour(DateTime.Now),2,0)
    current_min = NumberFormat(DateTime.GetMinute(DateTime.Now),2,0)
    current_dia = DateTime.GetDayOfWeek(DateTime.Now) 'dom=7 lun=1 mar=2
    
    ToastMessageShow("igual "&cuenta,True)
    Log(cuenta)
    
    If cuenta > 5   Then
        cuenta=0
        StartActivity(prueba)
        'CallSub(prueba,"Activity_Create")
        'CallSub(Main, "muestro1")
        'CallSubDelayed2(Main, "muestro1","hola")
        'CallSub
    End If
    
    StartServiceAt("", DateTime.Now + 1 * DateTime.TicksPerSecond, True) 'DateTime.TicksPerSecond
        
    'CallSub(Main, "muestra")
    'Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub

Sub Service_Destroy
    N.Cancel(1)
End Sub
 

piramide

Member
Licensed User
despues de los 5 segundo que se ejecuto la app, me abre la ventana layout"2" cuando invoco al activity: StartActivity(prueba) pero solo me funciona con el codigo de desbloqueo en cierto celular y no en todos los celulares con los que estoy probando.
¿Que estoy haciendo mal?
 

piramide

Member
Licensed User
Hola oparra, gracias x responder... Estoy probando con un android 9 (en este anda) pero con un android 10 NO funciona .
 

oparra

Well-Known Member
Licensed User
si es Android 10:

aquí es un posible problema y busca en las api de android 10 los cambios de ejecución de app en segundo plano.

Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)

no tengo el link APIS, pero me paso algo similar cuando migre las APP a android 10.

API 28 a API 29
 

oparra

Well-Known Member
Licensed User
algo mas:

también en su momento revise lo que recomiendan mucho este link:


pero cuando migre a android 10 tuve que hacer cambios, viendo la documentación de APIS 29

Tengo unas app que utiliza Mapas y si el usuario deja la en segundo plano android 10 mata el proceso.

saludos
 

José J. Aguilar

Expert
Licensed User
Hola piramide:

No me da tiempo ahora mismo a echarle un vistazo a tu código (tampoco estoy muy puesto con los servicios, aunque en teoría son parecidos a las actividades).
De todas formas, no entiendo bien qué es lo que quieres hacer.
Creo que el sistema operativo no te va a dejar que programes un servicio cada 5 segundos, terminará "matando" el servicio. Los servicios hay que programarlos al menos con 15 o 30 minutos. Pero, ¿estás intentando que tu aplicación se abra cada 5 segundos?. ¿No es eso molesto para el usuario, que estés haciendo cualquier cosa y tu app se abra para hacer algo, en vez de hacerlo en segundo plano?

saludos,
 

piramide

Member
Licensed User
Gracias Oparra, voy a investigar un poco eso que me decis...
Hola Jose Aguilar, gracias x responder, esta es una aplicacion sencilla de prueba solamente. Yo quiero poder abrir un activity de forma "automatica", sin necesidad de tener que pulsar algun boton dentro de una app para hacerlo.
En realidad, te cuento que lo que deseo hacer es (trabajando con notificaciones firebase) que al momento de recibir dicha notificacion se ejecute o abra o muestre en pantalla del smartphone una ventana o layout para que el usuario tome una decision.
Esto me funciona en smartphone con android 8 o 9 pero NO es android 10, de ahi mi consulta si debo actualizar algo o si a alguien le sucedio ¿?
 

piramide

Member
Licensed User
Tambien aclaro que en android 5 o 6 ni siquiera puedo instalar la app. Me aparece un mensaje al momento de querer instalarla (estoy usando el bridge) que dice. Error de analisis Se ha producido un error al analizar el paquete.
 
Top