CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 4 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 20 Thanks ricevuti negli ultimi sette giorni
Utente del mese: gianpassa con ben 79 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 4 su 4
Discussione:

PendingIntent

Se questa discussione ti Ŕ stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    PendingIntent

    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??
    GynLemon....m'hai fatto vený sete

  2.  
  3. #2
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,370
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 877 volte in 322 Posts
    Predefinito

    Sai che non ho mai notato questo tipo di comportamento ? Io ho sempre usato UPDATE_CURRENT e tutto funzionava.

    Twitter @veke87

  4. #3
    Senior Droid L'avatar di Cecco


    Registrato dal
    May 2009
    Messaggi
    478
    Smartphone
    Samsung Galaxy Nexus

    Ringraziamenti
    6
    Ringraziato 77 volte in 43 Posts
    Predefinito

    Guarda, secondo quanto ho capito, UPDATE_CURRENT consente di sovrascrivere l'extra dell'ultimo intent. Ad esempio:

    codice:
    Intent a = new Intent("MY_STRING")
    a.putExtra("num", num); //supponendo num=1
    ....
    getBroadcast(....a....);
    Ad un secondo giro, fai

    codice:
    Intent a = new Intent("MY_STRING");
    a.putExtra("num", num) //supponendo num=2
    ....
    getBroadcast(....a....);
    Con num che cambia....

    Sai che succede? Rimangono appesi due intent che girano in broadcast ENTRAMBI CON L'ULTIMO VALORE DI NUM settato.

    Deve esserci un modo per disabilitare i PendingIntent, non mi va di chiamare abortBroadcast().....

    Che ne pensi=
    GynLemon....m'hai fatto vený sete

  5. #4
    Baby Droid


    Registrato dal
    Nov 2010
    Messaggi
    35

    Ringraziamenti
    1
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Ciao a tutti, io uso un codice del genere:

    AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALA RM_SERVICE);
    Intent i = new Intent(context, Gps.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAK EUP, SystemClock.elapsedRealtime(), Integer.parseInt(Utilities.strFreqSend)*1000, pi);

    se io avessi questa classe Gps con al suo interno una funzione start(), come potrei richiamarla ciclicamente in modo analogo????????????

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy