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);
}