21

Napisałem kod w mojej GCMIntentservice, która wysyła powiadomienia push do wielu użytkowników. Używam programu NotificationManager, który wywoła klasę DescriptionActivity po kliknięciu powiadomienia. Ja też wysłać event_id tworzą GCMIntentService do DescriptionActivityputExtra przy użyciu oczekującego zamiaru nie działa

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

} 

tu event_id że dostaję w powyższej metody jest poprawna tzn ja zawsze zaktualizowany jeden. Ale w kodzie poniżej (DescriptionActivity.java):

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

event_id tutaj jest zawsze "5". Niezależnie od tego, co umieszczamExtra w klasie GCMIntentService, event_id dostaję zawsze 5. Czy ktoś może wskazać problem? Czy to z powodu oczekującego zamiaru? Jeśli tak, to jak mam sobie z tym poradzić?

Odpowiedz

41

Urządzenie PendingIntent jest ponownie używane z pierwszym dostarczonym Intent, to jest twój problem.

Aby tego uniknąć, należy użyć flagi PendingIntent.FLAG_CANCEL_CURRENT kiedy zadzwonić PendingIntent.getActivity() rzeczywiście dostać nowe:

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

Ewentualnie, jeśli chcesz po prostu zaktualizować dodatki, należy użyć flagi PendingIntent.FLAG_UPDATE_CURRENT

+0

Wielkie dzięki! To zadziałało :) – Nemin

+0

Niesamowita odpowiedź! Dzięki. –

+0

jeśli nie było to jasne: PendingIntent pi = PendingIntent.getActivity (this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); – Alecs

12

The PendingIntent jest ponownie wykorzystywany z pierwszym zamierzonym przez ciebie intencją, jak to powiedział Joffrey. Możesz spróbować użyć flagi PendingIntent.FLAG_UPDATE_CURRENT.

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

Może nadal używasz starej intencji. spróbuj tego:

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

    handleIntentExtraFromNotification(intent); 
} 
+0

Dziękuję bardzo. Walczę z tym –

Powiązane problemy