Una volta che si crea un nuovo PendingIntent
con FLAG_CANCEL_CURRENT
, qualsiasi cosa in possesso di un precedente PendingIntent
per lo stesso Intent
non sarà più in grado di eseguire quella originale PendingIntent
.
Per esempio, supponiamo di avere questo:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 1);
PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);
e usiamo che PendingIntent
con, diciamo, un Notification
.
Più tardi, eseguiamo:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
A questo punto, il PendingIntent
creato in origine (pi
) non è più valida, e tutto ciò che usiamo per pi2
vedrà il valore aggiunto aggiornato (2
).
Se, invece, abbiamo fatto:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
A questo punto, pi
e pi2
entrambi rappresentano la stessa PendingIntent
, ed entrambi vedranno il valore aggiunto aggiornato (2
).
Oppure, se abbiamo fatto:
Intent i=new Intent(this, Foo.class);
i.putExtra("key", 2);
PendingIntent pi2=PendingIntent.getActivity(this, 0, i, 0);
A questo punto, pi
e pi2
rappresentano ancora la stessa PendingIntent
, ma gli extra sono invariati, come getActivity()
restituisce il originalePendingIntent
senza applicare i nuovi extra.
La maggior parte delle volte, FLAG_UPDATE_CURRENT
è una risposta soddisfacente quando si tenta di sostituire gli extra all'interno di uno PendingIntent
.
@VikalpPatel - la modifica era sbagliata - l'OP aveva ragione - si prega di fare attenzione –