Hola.
No he conseguido captar del todo lo que me explicas en el segundo párrafo,
@bgsoft. Pero sí me has dado la pista de la solución a lo que andaba buscando. Por recordar comento que lo que ando buscando es que al recibir un mensaje desde
Firebase Notifications, se muestre un icono avisando de ello en la barra superior. Cuando el usuario decida ver el mensaje pincha ese icono y,
sin que se produzca un cambio de Actividad, se muestre el mensaje en lo que vendría a ser una ventana emergente (puede ser un Msgbox o un panel.)
Como el
Setinfo2 (o Setinfo) obliga a apuntar a una determinada actividad (que puede ser Main o cualquier otra) visualmente se produce un cambio de actividad en pantalla desde la que estábamos a esta que se ha apuntado en el Setinfo. Lo que me he percatado, a raíz del anterior mensaje de
@bgsoft, es que si nada más entrar en esta actividad se sale de ella, volvemos al Resume de la actividad en la que estábamos en el momento de pulsar sobre el icono de notificación de la barra superior, sin que visualmente se perciba un cambio de actividad.
Una vez así, desde el Resume ya puede mostrar el contenido del mensaje. He optado por hacerlo cargando un Layout donde se mostraría dicho mensaje. Como este procedimiento de mostrar el mensaje (desde el Resume de la actividad en la que estaba cuando se pulsa el icono de notificación) tendría que implementarlo en varias actividades, he intentando usar una clase de manera que no he de duplicar código. La entrada a la clase me funciona perfectamente, pero ahora me he encontrado un nuevo problema a la hora de quitar de pantalla el mensaje mostrado y salir de la clase. Como este problema es totalmente distinto al tema de este hilo haré la consulta en uno nuevo.
Como indicaba, he recurrido a una clase para evitar tener que duplicar código, aunque la programación de esta clase tiene fallos que aún no he conseguido resolver.
Adjunto el proyecto B4A, así el B4J que estoy usando para enviar los mensajes. Al B4A habría que añadirle el archivo
google-services.json y al B4J la Key correspondiente.
Gracias
@bgsoft por mostrarme el camino para encontrar lo que buscaba.
Saludos.
'**** MAIN ****
Sub Process_Globals
Dim muestra_notificacion As Boolean
Dim strTitulo As String
Dim strMensaje As String
End Sub
Sub Globals
Private Button1 As Button
Private Button2 As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Para que funcione se ha de añadir a la carpeta del proyecto el archivo "google-services.json" generado por la consola firebase y comentar esta línea
Activity.LoadLayout("Mensajero")
If FirstTime=True Then
'Llamamos a la función suscribetopics del módulo de servicio firebasemessaging para asegurarnos de que estamos suscritos al teme seleccionado en este caso el topic se llama "general"
CallSubDelayed(FirebaseMessaging, "SubscribeToTopics")
End If
End Sub
Sub Activity_Resume
'Compruebo si se ha de mostrar el mensaje
If muestra_notificacion Then
'Muestro el mensaje usando una clase, aunque al salir de la misma me presenta un error pendiente de resolver
Dim notificacion As muestra_mensaje
notificacion.Initialize("")
notificacion.muestra ()
'Desactivo la "variable bandera" para mostrar el mensaje
muestra_notificacion = False
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
StartActivity(actividad1)
End Sub
Sub Button2_Click
StartActivity(actividad2)
End Sub
'**** actividad1 ****
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("actividad_1")
End Sub
Sub Activity_Resume
'Compruebo si se ha de mostrar el mensaje
If Main.muestra_notificacion Then
'Muestro el mensaje usando una clase, aunque al salir de la misma me presenta un error pendiente de resolver
Dim notificacion As muestra_mensaje
notificacion.Initialize("")
notificacion.muestra ()
'Desactivo la "variable bandera" para mostrar el mensaje
Main.muestra_notificacion = False
End If
End Sub
'**** activa_mensaje ****
Sub Activity_Create(FirstTime As Boolean)
End Sub
Sub Activity_Resume
'Aquí llego desde el n.SetInfo.
'Con la siguiente variable globar activo para que se me muestre el mensaje
'Y luego salgo rápidamente regresando a la actividad desde la que que se pulsó el icono de notificación del mensaje
'sin que visualmente se note este cambio de actividades
Main.muestra_notificacion = True
Activity.Finish
End Sub
'**** CLASE muestra_mensaje ****
Sub Class_Globals
'Dimensiono una actividad
Dim actividad As Activity
Dim lblMensaje As Label
Dim lblTitulo As Label
Dim btnCerrar As Button
Dim panel1 As Panel
End Sub
'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize (nada As String)'actActividad As Activity)
End Sub
Sub muestra ()
'Cargo el Layout que me muestra en el mensaje dentro de la actividad dimensionada más arriba
actividad.LoadLayout("notificacion")
'Relleno el campo Titulo y Mensaje dentro del Layout
lblTitulo.Text = Main.strTitulo
lblMensaje.Text = Main.strMensaje
End Sub
Sub btnCerrar_click
' panel1.RemoveView
'Al pulsar el botón intento finalizar la actividad creada, pero me salta un error
actividad.Finish 'Salta error al intentar cerrar
End Sub