PendingIntent des conflits d'histoire notification et d'application
-
23-09-2019 - |
Question
Je crée une notification avec quelque chose de semblable à ce qui suit:
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 clé est ici les données supplémentaires sur l'intention de la notification. Une fois que je clique sur la notification et soulève SomeActivity, il évoque l'activité et les données supplémentaires seront disponibles.
Cependant, si je quitte l'application, maintenez le bouton d'accueil jusqu'à ce que la liste des activités récentes arrive, et choisir d'ouvrir à nouveau l'application, les données supplémentaires sont encore passé. Est-il possible que je puisse faire de ces données se passe que si l'application est ouverte par la notification, et non dans la liste des récentes activités?
La solution
On dirait que je peux vérifier si l'activité a été lancée à partir des activités récentes de dialogue avec ceci:
if((getIntent().getFlags() &
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
// ignore extras
}
else {
// do not ignore extras
}
Je ne sais pas si cela est la meilleure façon, mais il fonctionne.
Autres conseils
Utilisez un autre Intent
. Par exemple, vous pouvez ajouter un <intent-filter>
pour une chaîne d'action personnalisée, et l'utiliser pour votre base Notification
PendingIntent
. En d'autres termes, vous ne pouvez pas changer la boîte de dialogue les plus récentes activités, mais vous pouvez changer votre côté du conflit.
Essayez avec:
int NOTIFICATION_CODE = 1;
PendingIntent contentIntent =
PendingIntent.getActivity(this,
NOTIFICATION_CODE,
ni,
PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_ONE_SHOT
);
Modifier la valeur notification_code pour chaque notification.