Tengo una aplicación con notificaciones que abren una determinada actividad si hago clic en ellas. Quiero eso, si hago clic en la notificación y la actividad ya está abierta, no se inicia de nuevo, sino que se pone al frente.
Pensé que podría hacerlo con la bandera FLAG_ACTIVITY_BROUGHT_TO_FRONT
o FLAG_ACTIVITY_REORDER_TO_FRONT
, pero sigue abriéndola nuevamente, así que tengo la actividad dos veces.
Este es mi código:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
¿Puedo administrarlo con banderas o debo almacenar una variable en SharedPreferences para verificar si está abierta o no?
¡Gracias!
android
notifications
android-activity
Desarrollador PX
fuente
fuente
Respuestas:
Debe establecer el
launchMode
atributo delActivity
que está comenzandosingleTop
. Esto hará que los intentos entrantes se entreguen a la instancia existente en lugar de comenzar una nueva instancia cuandoActivity
ya está en la parte superior de la pila de la tarea.Esto se hace en el manifiesto agregando
android:launchMode="singleTop"
al<activity>
elemento. Para acceder a la última intención (si está interesado en algún dato que pueda haber pasado), anuleonNewIntent()
en suActivity
.fuente
Intenta configurar las banderas en su
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
lugar.De la documentación para FLAG_ACTIVITY_CLEAR_TOP (el énfasis es mío):
fuente
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.Úselo
onNewIntent()
para manejar nuevos datos de notificaciones, haga clic y actualice la actividad.Para
onNewIntent
obtener los nuevos datos de la nueva intención (que sirve la nueva notificación) y capturarlos, por ejemplo:title = intent.getStringExtra("title")
en
onCreate
anteriormente :)Actualizará la actividad actual con nuevos datos de notificación.
También puedes seguir este tutorial.
fuente
Simplemente copie el código y péguelo en su actividad principal de iniciador.
Aquí está la respuesta original
fuente
Creo que debería agregar algo de lógica para que funcione, tal vez esto pueda ayudar:
Por ejemplo, tengo una pantalla de inicio (Iniciador y PRINCIPAL) de la APLICACIÓN:
Y en mi FirebaseService he hecho lo siguiente:
fuente
fuente