Apro un altro topic, magari può essere utile dato che è un problema ricorrente in android e non ancora esiste una soluzione precisa.
Il caso d'uso è questo: inviare un SMS tramite le API di Android e attraverso due pending intent: SendPI e DeliveredPI che viaggiano in broadcast e contengono, rispettivamente, se il messaggio è stato inviato e se il messaggio è stato recapitato.
Il problema è questo: i PendingIntent, quando inviati in Broadcast, non vengono rimossi una volta catturati, ma continuano a girare.
Esempio: Invio un primo sms con la mia applicazione ed il funzionamento è corretto. A distanza di qualche secondo, decido di inviarne un altro; in questo caso il mio broadcastReceveir che si preoccupa di "ascoltare" i PendingIntent inviati in broadcast, NE RICEVE DUE (quello nuovo e quello vecchio). E così via...
Tra i vari flag dei PendingIntent ho notato FLAG_ONE_SHOT, FLAG_UPDATE_CURRENT ed altri che comunque servono solo per gestire l'extra dell'intent.
Dunque: come poter risolvere questo problema dei PendingIntent? Esiste un modo per eliminarli dal broadcast??
Oppure, esiste un modo su Android per leggere, ad un determinato istante, la lista dei PendingIntent che girano in Broadcast?
Un consiglio, a detta di Dianne Hackborn, consiste nell'utilizzare un Activity, invece del Broadcast, ossia invocare getActivity(.....) invece che getBroadcast(...). In questo modo il PendingIntent verrebbe "consumato" ed eliminato dal Broadcast.
Tuttavia, l'utilizzo di un Activity non è sempre ottimale (io, personalmente, prediligo i Broadcast per le operazioni di basso livello) soprattutto se con quell'intent non c'è necessità di avere eventi dall'esterno.
Qualcuno di voi ha idee a riguardo su questo argomento??