Obtengo esta excepción en mi código:

...IllegalArgumentException...Cant use FLAG_RECEIVER_BOOT_UPGRADE here...

Al mirar el código fuente de Android, parece que no puede establecer indicadores en un Intent que se activará a través de:

PendingIntent.getBroadcast(...);

Aquí el código fuente de Android:

...
if (type == INTENT_SENDER_BROADCAST) {
    if ((intent.getFlags()&Intent.FLAG_RECEIVER_BOOT_UPGRADE) != 0) {
        throw new IllegalArgumentException("Can't use FLAG_RECEIVER_BOOT_UPGRADE here");
    }
}
...

Aquí mi código:

Intent myIntent = new Intent(context, MyReceiver.class);
//myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if i remove the comment it doesn't work
PendingIntent pending = PendingIntent.
          getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

El motivo no me queda claro, ¿alguien me lo podría aclarar por favor?

1
gwvatieri 21 dic. 2011 a las 05:33

1 respuesta

La mejor respuesta

Cuando obtienes un PendingIntent usando getBroadcast(), este Intent se transmitirá a BroadcastReceivers. NO se utilizará para iniciar una actividad. Por lo tanto, no puede configurar ninguno de los indicadores relacionados con la actividad. De todos modos, no tendrían ningún sentido en ese contexto.

¿Por qué querrías establecer FLAG_ACTIVITY_NEW_TASK en un Intent que se transmitirá? Eso no tiene sentido.

Android usa Intents para 3 propósitos completamente diferentes:

  1. Comenzando / Comunicándose con Activity
  2. Comenzando / Comunicándose con Service
  3. Transmitir a BroadcastReceiver

La clase PendingIntent ofrece 3 métodos diferentes para obtener un PendingIntent para cada uno de estos diferentes propósitos:

  1. getActivity ()
  2. getService ()
  3. getBroadcast ()

Debe asegurarse de utilizar el método correcto para el propósito correcto.

Y sí, puede establecer indicadores de intención relacionados con la actividad en un PendingIntent, siempre que llame a getActivity () para obtener el PendingIntent.

4
David Wasser 12 jun. 2012 a las 20:49
Hola David, fue mi culpa. No presté suficiente atención cuando tuve ese problema en ese momento, gracias por responder.
 – 
gwvatieri
25 jun. 2012 a las 12:44