problema de notificación de intención pendiente de Android

Tengo un problema de alarma en mi aplicación y se lanza una notificación que luego cuando se presiona se inicia una actividad. El problema es que cuando creo más de una alarma, la actividad lanzada desde la notificación obtiene los mismos extras que la primera. Creo que el problema es con la intención que puse en el bash pendiente o en el bash pendiente en sí. Creo que podría necesitar poner una bandera en uno de estos, pero no sé cuál.

Intent showIntent =new Intent(context, notificationreceiver.class); showIntent.putExtra("details", alarmname); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, showIntent, 0); notification.setLatestEventInfo(context, "The event is imminent", alarmname, contentIntent); 

Y el receptor de la notificación

 Bundle b = getIntent().getExtras(); String eventname = b.getString("details"); details.setText(eventname); 

Los “detalles” adicionales son los mismos para cada uno la próxima vez que ocurre una notificación en lugar de tener un valor diferente. Hasta que establezca los bashs, estoy seguro de que el valor correcto va a los “detalles”, por lo que es un problema de obtener el primer bash cada vez que presiono una notificación. ¿Cómo puedo hacer para lanzar los bashs correctos? Espero haber sido tan claro como pude ¡Gracias!

El problema es que cuando creo más de una alarma, la actividad lanzada desde la notificación obtiene los mismos extras que la primera.

Correcto.

¿Cómo puedo hacer para lanzar los bashs correctos?

Eso depende de si tiene dos alarmas que se registrarán a la vez o no.

De lo contrario, puede usar FLAG_ONE_SHOT o uno de los otros indicadores PendingIntent para que su segundo PendingIntent use los nuevos extras.

Sin embargo, si tiene dos alarmas registradas a la vez, con diferentes extras de Intent , necesitará hacer que las dos Intents sean más diferentes materialmente, de modo que filterEquals() devuelva false al comparar las dos. Por ejemplo, puede llamar a setData() o setAction() y proporcionar diferentes valores para cada Intent .

La forma en que resolví ese problema fue asignando un único requestCode cuando recibes el PendingIntent:

 PendingIntent.getActivity(context, requestCode, showIntent, 0); 

Al hacerlo, se está registrando en el sistema instancias de bash diferentes / únicas. Consejo: Una buena forma de hacer único el requestCode sería pasándole la hora actual del sistema.

 int requestID = (int) System.currentTimeMillis(); 

otra solución:

utilice PendingIntent.FLAG_UPDATE_CURRENT de la siguiente manera:

 PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT); 

esto funcionó para mí

Tuve este problema en mi aplicación y acabo de generar un número aleatorio para superar el bash de notificaciones generales:

 int random= new Random().nextInt(); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( random, PendingIntent.FLAG_UPDATE_CURRENT );