putExtra使用挂起的意图不起作用

时间:2013-05-04 16:46:57

标签: push-notification android-notifications android-notification-bar android-pendingintent

我在GCMIntentservice中编写了一个代码,用于向许多用户发送推送通知。我使用NotificationManager,在单击通知时将调用DescriptionActivity类。我还将event_id格式的GCMIntentService发送到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);

}

这里我在上面的方法中得到的event_id是正确的,即我总是得到更新的。但是在下面的代码中(DescriptionActivity.java):

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

此处的event_id始终为“5”。无论我把什么放在GCMIntentService类中,我得到的event_id总是5.有人可以指出问题吗?是因为未决意图?如果是,那我该怎么处理呢?

3 个答案:

答案 0 :(得分:42)

PendingIntent会在您提供的第一个Intent时重复使用,这就是您的问题。

要避免这种情况,请在致电PendingIntent.getActivity()时使用标记PendingIntent.FLAG_CANCEL_CURRENT以实际获得新标记:

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

或者,如果您只想更新附加内容,请使用标记PendingIntent.FLAG_UPDATE_CURRENT

答案 1 :(得分:12)

正如Joffrey所说,PendingIntent会重复使用你提供的第一个意图。您可以尝试使用标志PendingIntent.FLAG_UPDATE_CURRENT。

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

答案 2 :(得分:4)

也许你还在使用旧的意图。试试这个:

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

    handleIntentExtraFromNotification(intent);
}