Подтвердить что ты не робот

PutExtra использование ожидающего намерения не работает

Я написал код в своем GCMIntentservice, который отправляет push-уведомления многим пользователям. Я использую 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"));

Событие_id здесь всегда "5". Независимо от того, что я putExtra в классе GCMIntentService, event_id я получаю всегда 5. Может кто-нибудь, пожалуйста, указать на проблему? Это из-за ожидаемого намерения? Если да, то как мне его обрабатывать?

4b9b3361

Ответ 1

PendingIntent повторно используется с первым Intent, который вы указали, что ваша проблема.

Чтобы избежать этого, используйте флаг PendingIntent.FLAG_CANCEL_CURRENT, когда вы вызываете PendingIntent.getActivity(), чтобы получить новый:

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

Кроме того, если вы просто хотите обновить дополнительные функции, используйте флаг PendingIntent.FLAG_UPDATE_CURRENT

Ответ 2

PendingIntent повторно используется с первым Предложением, которое вы предоставили, как было сказано Джоффри. Вы можете попробовать использовать флаг PendingIntent.FLAG_UPDATE_CURRENT.

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

Ответ 3

Возможно, вы все еще используете старые намерения. попробуйте следующее:

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

    handleIntentExtraFromNotification(intent);
}