2014-05-18 13 views
11

Posso ottenere il Intent da un PendingIntent?Come ottenere l'intenzione da PendingIntent

Ecco lo scenario:

  1. creo un Intent (chiamiamolo myIntent)
  2. ho messo qualche informazione in più con una stringa (chiamarlo myInfo)
  3. creo un PendingIntent (myPendingIntent) utilizzando myIntent
  4. Ho impostato un allarme utilizzando AlarmManager e myPendingIntent
  5. In una fase successiva ho entrare in possesso del PendingIntent utilizzando PendingIntent.getBroadcast
  6. A quel punto voglio leggere myInfo da myIntent che è in myPendingIntent

è possibile? Guardando in giro per Google, mi sto avvicinando alla conclusione che questo non è possibile.

risposta

11

È possibile?

No. PendingIntent è un'interfaccia di sola scrittura. È possibile sostituire lo Intent, ma non è possibile leggerlo.

+0

Sembra che tu possa ottenere l'Intento (recuperare gli Extra originariamente memorizzati con esso) se è attualmente detenuto da AlarmManager se si chiama 'PendingIntent.getService' (o forse' .getBroadcast') con lo stesso 'requestCode' come bandiere originali e * no *, e immediatamente immediatamente 'invia()' l'intento a se stessi. C'è qualche ragione per cui non si dovrebbe usare questo metodo (è affidabile su tutte le versioni di Android)? – Michael

+0

@ Michael: non l'ho usato e non lo userei, quindi non posso commentare la sua affidabilità. Francamente, sono stato costernato nello scoprire che è possibile. – CommonsWare

+0

Ok. Perché sgomento? – Michael

3

È possibile dal 4.2.2 utilizzando la riflessione. Date un'occhiata a questo answer, c'è la soluzione completa per ottenere Intent da PendingIntent.

+0

Questa soluzione non funzionerà se si tenta di ottenere un pacchetto Parceable dall'intento. –

+0

Nelle versioni più recenti di Android, non è più possibile ottenere l'intenzione utilizzando la riflessione. Vedi https://stackoverflow.com/q/42401911/324625 –