notification example ejemplo developer anatomy push-notification android-notifications android-notification-bar android-pendingintent

push notification - example - putExtra usando la intención pendiente no funciona



push notification developer android (3)

El PendingIntent se reutiliza con el primer Intent que proporcionó, ese es su problema.

Para evitar esto, use el indicador PendingIntent.FLAG_CANCEL_CURRENT cuando llame a PendingIntent.getActivity() para obtener uno nuevo:

PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Alternativamente, si solo desea actualizar los extras, use la bandera PendingIntent.FLAG_UPDATE_CURRENT

He escrito un código en mi GCMIntentservice que envía notificaciones push a muchos usuarios. Utilizo el NotificationManager que llamará a la clase DescriptionActivity cuando se haga clic en la notificación. También envío el event_id desde el GCMIntentService a DescriptionActivity

protected void onMessage(Context ctx, Intent intent) { message = intent.getStringExtra("message"); String tempmsg=message; if(message.contains("You")) { String temparray[]=tempmsg.split("="); event_id=temparray[1]; } nm= (NotificationManager)getSystemService(NOTIFICATION_SERVICE); intent = new Intent(this, DescriptionActivity.class); Log.i("the event id in the service is",event_id+""); intent.putExtra("event_id", event_id); intent.putExtra("gcmevent",true); PendingIntent pi = PendingIntent.getActivity(this,0, intent, 0); String title="Event Notifier"; Notification n = new Notification(R.drawable.defaultimage,message,System.currentTimeMillis()); n.setLatestEventInfo(this, title, message, pi); n.defaults= Notification.DEFAULT_ALL; nm.notify(uniqueID,n); sendGCMIntent(ctx, message); }

Aquí el event_id que obtengo en el método anterior es correcto, es decir, siempre obtengo el actualizado. Pero en el siguiente código (DescriptionActivity.java):

intent = getIntent(); final Bundle b = intent.getExtras(); event_id = Integer.parseInt(b.getString("event_id"));

El event_id aquí es siempre "5". No importa lo que ponga en la clase GCMIntentService, el event_id que obtengo es siempre 5. ¿Alguien puede señalar el problema? ¿Es debido a la intención pendiente? Si es así, entonces, ¿cómo debo manejarlo?


El PendingIntent se reutiliza con el primer intento que proporcionaste, como lo dijo Joffrey. Puedes intentar usar la bandera PendingIntent.FLAG_UPDATE_CURRENT.

PendingIntent pi = PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);


Tal vez usted todavía está utilizando la vieja intención. prueba esto:

@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); //try using this intent handleIntentExtraFromNotification(intent); }