问题
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?
回答1:
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
回答2:
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);
回答3:
Maybe you are still using the old intent. try this:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//try using this intent
handleIntentExtraFromNotification(intent);
}
来源:https://stackoverflow.com/questions/16376643/putextra-using-pending-intent-not-working