Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

putExtra using pending intent not working

Tags:

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?

like image 482
Nemin Avatar asked May 04 '13 16:05

Nemin


People also ask

What is the putExtra () method used with intent for?

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.

Which method is used to create pending intent?

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.

What is the use of pending intent?

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.


2 Answers

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

like image 89
Joffrey Avatar answered Oct 10 '22 13:10

Joffrey


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); 
like image 33
santhyago Avatar answered Oct 10 '22 12:10

santhyago