Estoy creando una notificación dentro de un BroadcastReceiver a través de este código:
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns);
int icon = R.drawable.ic_stat_notification;
CharSequence tickerText = "New Notification";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_VIBRATE;
long[] vibrate = {0,100,200,200,200,200};
notification.vibrate = vibrate;
notification.flags |= Notification.FLAG_AUTO_CANCEL;
CharSequence contentTitle = "Title";
CharSequence contentText = "Text";
Intent notificationIntent = new Intent(context, NotificationActivity.class);
notificationIntent.putExtra(Global.INTENT_EXTRA_FOO_ID, foo_id);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
int mynotification_id = 1;
mNotificationManager.notify(mynotification_id, notification);
Cuando hago clic en la notificación, se abre NotificationActivity y dentro de la Actividad puedo recuperar el foo_id del Intent-Bundle (por ejemplo, 1)
Sin embargo, si se activa otra notificación y hago clic en ella nuevamente, la actividad aún recibe el valor "antiguo" (1) del paquete de intención. Intenté borrar el paquete con clear (), pero recibo el mismo efecto. Creo que algo está mal con mi código ...
Respuestas:
Está enviando el mismo código de solicitud para su intensidad pendiente. Cambia esto:
A:
no se crean intenciones si envía los mismos parámetros. Son reutilizados.
fuente
Intent
que tiene diferentes extras (a travésputExtra
) se consideran la misma y reutilizada porque yo no presentar una identificación única para algunos llaman la intención pendientes - terribles apiAlternativamente, puede usar el siguiente código para generar su PendingIntent:
Del documento para
PendingIntent.FLAG_UPDATE_CURRENT
:fuente
Estás pasando la misma identificación. En este tipo de situación, cree una identificación única en un momento como este:
Y ponlo así:
fuente
System.currentTimeMillis()
devuelve un largo, mientras que elrequestId
parámetro dePendingIntent.getActivity()
toma un int.0xffffffff
Es una máscara de bits. Si bien hay un poco más, la explicación simple es que hacer 'long & 0xffffffff' da los 32 bits más bajos del largo y descarta los 32 bits más altos, dejándolo esencialmente con un int de 32 bits. Esto es mejor que simplemente enviar a un int porque no arruinará el bit de signo (si lanza un largo que es más grande que un int a un int, el bit de signo se desbordará y potencialmente terminará con un valor negativo )Para cualquiera que busque el mejor enfoque después de mucho tiempo, debe pasar el PendingIntent.FLAG_UPDATE_CURRENT como último argumento, como se muestra a continuación.
ni siquiera necesita proporcionar una nueva identificación única.
Debe hacer esto para la próxima vez en adelante, no por primera vez
fuente
Su código de solicitud es 0 para todas las notificaciones. Cambiar la siguiente línea:
Con:
fuente
Solo quería agregar otra opción
fuente