PendingIntent de conflictos de historial de aplicaciones y notificaciones
-
23-09-2019 - |
Pregunta
Estoy creando una notificación con algo similar a lo siguiente:
Intent ni = new Intent(this, SomeActivity.class);
ni.putExtra("somestring", "somedata");
PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, ni,
PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);
Context context = getApplicationContext();
notification.setLatestEventInfo(context,
res.getString(R.string.app_name),
text, contentIntent);
La clave aquí son los datos adicionales sobre la intención de la notificación.Una vez que hago clic en la notificación y aparece SomeActivity, aparece la actividad y los datos adicionales están disponibles.
Sin embargo, si salgo de la aplicación, mantengo presionado el botón de inicio hasta que aparezca la lista de actividades recientes y elijo abrir la aplicación nuevamente, los datos adicionales aún se pasan.¿Hay alguna manera de hacer que se pasen estos datos? solo ¿Si la aplicación se abre a través de la notificación y no desde la lista de actividades recientes?
Solución
Parece que se puede comprobar para ver si la actividad se puso en marcha desde el diálogo de las actividades recientes con esto:
if((getIntent().getFlags() &
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
// ignore extras
}
else {
// do not ignore extras
}
No sé si esta es la mejor manera, pero funciona.
Otros consejos
Utilice un Intent
diferente. Por ejemplo, se podría añadir un <intent-filter>
por alguna cadena de acción personalizada, y el uso que para su Notification
basada en PendingIntent
. En otras palabras, no se puede cambiar de diálogo de las actividades más recientes, pero puede cambiar su lado del conflicto.
Trate con:
int NOTIFICATION_CODE = 1;
PendingIntent contentIntent =
PendingIntent.getActivity(this,
NOTIFICATION_CODE,
ni,
PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_ONE_SHOT
);
Modificar el valor NOTIFICATION_CODE para cada notificación.