I have written a code in my GCMIntentservice that sends push notifications to many users. I use the NotificationManager that will call DescriptionActivity class when the notification is clicked. I also send the event_id form the GCMIntentService to the 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); }
Here the event_id that I'm getting in the above method is correct i.e I always get the updated one. But in the code below (DescriptionActivity.java):
intent = getIntent(); final Bundle b = intent.getExtras(); event_id = Integer.parseInt(b.getString("event_id"));
The event_id here is always "5". No matter what I putExtra in the GCMIntentService class,the event_id I get is always 5. Can somebody please point out the problem? Is is because of the pending intent? If yes, then how should I handle it?
Using putExtra() We can start adding data into the Intent object, we use the method defined in the Intent class putExtra() or putExtras() to store certain data as a key value pair or Bundle data object. These key-value pairs are known as Extras in the sense we are talking about Intents.
The operation associated with the pendingIntent is executed using the send() method. The parameters inside the getActivity() method and there usages are described below : this (context) : This is the context in which the PendingIntent starts the activity.
A PendingIntent itself is simply a reference to a token maintained by the system describing the original data used to retrieve it. This means that, even if its owning application's process is killed, the PendingIntent itself will remain usable from other processes that have been given it.
The PendingIntent
is reused with the first Intent
you provided, that's your problem.
To avoid this, use the flag PendingIntent.FLAG_CANCEL_CURRENT
when you call PendingIntent.getActivity()
to actually get a new one:
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Alternatively, if you just want to update the extras, use the flag PendingIntent.FLAG_UPDATE_CURRENT
The PendingIntent is reused with the first Intent you provided, as it was said by Joffrey. You can try use the flag PendingIntent.FLAG_UPDATE_CURRENT.
PendingIntent pi = PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With