Pregunta ¿Para qué se utiliza "requestCode" en PendingIntent?


Fondo:

Estoy usando PendingIntent para alarmas a través de AlarmManager.

El problema:

Al principio pensé que para cancelar los anteriores, debo proporcionar el requestCode exacto que he usado antes para iniciar la alarma.

Pero luego descubrí que estaba equivocado, ya que API de cancelación dice:

Elimine cualquier alarma con un Intento correspondiente. Cualquier alarma, de cualquier tipo,   cuyo Intento coincide con este (como se define por filterEquals (Intención)),   será cancelada.

mirando a "filterEquals", la documentación dice:

Determine si dos intenciones son las mismas a los fines de la intención   resolución (filtrado). Es decir, si su acción, datos, tipo, clase,   y las categorías son lo mismo. Esto no compara ningún dato adicional   incluido en los intentos.

así que no entiendo para qué es "requestCode" ...

La pregunta:

¿Para qué se usa "requestCode"?

¿Qué sucede si creo varias alarmas con el mismo "requestCode"? ¿se anulan el uno al otro?


74
2018-02-03 11:34


origen


Respuestas:


  1. requestCode se usa para recuperar la misma instancia de intento pendiente más tarde (para cancelar, etc.).
  2. Sí, supongo que las alarmas se anularán entre sí. Mantendré los códigos de solicitud únicos.

59
2018-02-03 12:04



Solo quiero agregar a la respuesta @Minhaj Arfin

1- requestCode se usa para obtener el mismo intento pendiente más tarde (para cancelar, etc.)

2- Sí, prevalecerán siempre que especifique el mismo receptor para su intención que usted especifique en su PendingIntent

ejemplo:

Intent startIntent1 = new Intent(context, AlarmReceiverFirst.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(context, 0, startIntent1, 0);

Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, 0);

Del ejemplo de arriba, ellos no lo hará se anulan entre sí porque el receptor es diferente(AlarmReceiverFirst y AlarmReceiverSecond)

Intent startIntent2 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context, 0, startIntent2, 0);

Intent startIntent3 = new Intent(context, AlarmReceiverSecond.class);
PendingIntent pendingIntent3 = PendingIntent.getBroadcast(context, 0, startIntent3, 0);

Del ejemplo de arriba, ellos será se anulan entre sí, porque el receptor es el mismo(AlarmReceiverSecond)


17
2017-08-04 05:56