21

Ich habe einen Code in meinem GCMIntentservice geschrieben, der Push-Benachrichtigungen an viele Benutzer sendet. Ich verwende den NotificationManager, der die DescriptionActivity-Klasse aufruft, wenn auf die Benachrichtigung geklickt wird. Ich schicke auch die event_id die GCMIntentServiceputExtra mit ausstehender Absicht funktioniert nicht

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); 

} 

Hier die event_id zum DescriptionActivity bilden, die ich in dem oben genannten Verfahren immer korrekt heißt ich die aktualisierte man immer bekommen. Aber in dem folgenden Code (DescriptionActivity.java):

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

Die event_id hier ist immer "5". Egal, was ich putExtra in der GCMIntentService-Klasse, die Ereignis-ID, die ich bekomme, ist immer 5. Kann jemand bitte auf das Problem hinweisen? Ist das wegen der ausstehenden Absicht? Wenn ja, wie soll ich damit umgehen?

Antwort

41

Die PendingIntent wird mit der ersten Intent wiederverwendet, die Sie zur Verfügung gestellt haben, das ist Ihr Problem.

Um dies zu vermeiden, verwenden Sie das Flag PendingIntent.FLAG_CANCEL_CURRENT, wenn Sie PendingIntent.getActivity() rufen ein neues tatsächlich zu bekommen:

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

Alternativ, wenn Sie nur die Extras aktualisieren möchten, verwenden Sie das Flag PendingIntent.FLAG_UPDATE_CURRENT

+0

Vielen Dank Mann! Es hat funktioniert :) – Nemin

+0

Awesome Antwort! Vielen Dank. –

+0

Wenn es nicht klar war: PendingIntent pi = PendingIntent.getActivity (this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); – Alecs

12

Die PendingIntent wird mit der von Ihnen angegebenen ersten Absicht erneut verwendet, wie es von Joffrey gesagt wurde. Sie können versuchen, das Flag PendingIntent.FLAG_UPDATE_CURRENT zu verwenden.

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

Vielleicht verwenden Sie immer noch die alte Absicht. versuchen Sie dies:

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

    handleIntentExtraFromNotification(intent); 
} 
+0

Vielen Dank. Ich habe damit gekämpft –