putExtra utilisant l'intention en attente ne fonctionne pas

J'ai écrit un code dans mon GCMIntentservice qui envoie des notifications push à de nombreux utilisateurs. J'utilise le NotificationManager qui appellera la classe DescriptionActivity lorsque la notification est cliquée. J'envoie également le event_id du GCMIntentService à la 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);

}

Ici, l'event_id que je reçois dans la méthode ci-dessus est correct, c'est-à-dire que j'obtiens toujours celui mis à jour. Mais dans le code ci-dessous (DescriptionActivity.java):

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

L'event_id ici est toujours "5". Peu importe ce que je putExtra dans la classe GCMIntentService, l'event_id que je reçois est toujours 5. Quelqu'un peut-il s'il vous plaît signaler le problème? Est-ce à cause de l'intention en attente? Si oui, alors comment dois-je le gérer?

22
demandé sur Nemin 2013-05-04 20:46:57

3 réponses

Le PendingIntent est réutilisé avec le premier Intent fourni par vous, c'est votre problème.

Pour éviter cela, utilisez le drapeau PendingIntent.FLAG_CANCEL_CURRENT lorsque vous appelez PendingIntent.getActivity() pour réellement obtenir un nouveau:

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

Sinon, si vous voulez juste de mettre à jour les extras, utilisez le drapeau PendingIntent.FLAG_UPDATE_CURRENT

42
répondu Joffrey 2016-03-06 21:37:00

Le PendingIntent est réutilisé avec la première intention que vous avez fournie, comme il a été dit par Joffrey. Vous pouvez essayer d'utiliser le drapeau PendingIntent.FLAG_UPDATE_CURRENT.

PendingIntent pi = PendingIntent.getActivity(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
12
répondu santhyago 2014-10-30 19:46:58

Peut-être que vous utilisez toujours l'ancienne intention. essayez ceci:

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

    handleIntentExtraFromNotification(intent);
}
4
répondu FilipMarusca 2015-12-11 15:41:10