getString из Bundle теряет старое значение

Из FirstActivity я создаю три отдельных уведомления и, щелкая по ним, запускаю SecondActivity, которая находится в том же приложении. Проблема в том, что значение строки в SecondActivity всегда является последним уведомлением, которое я опубликовал. Мне нужно запустить SecondActivity, и вызов на дисплей происходит из Уведомления 1, когда я нажимаю на Уведомление с id =1 и аналогично для id = 2 и id =3. Но я теряю эти дополнения в своем намерении. Пожалуйста, помогите мне с этим, если вы сталкивались с такой ситуацией раньше. Я пробовал флаг PendingIntent FLAG_CANCEL_CURRENT, но тщетно. Заранее спасибо.:-)

NotificationManager nm;
Notification n;
PendingIntent pi1, pi2, pi3;
Button btnNotify1, btnNotify2, btnNotify3;
Intent intent;

final static String TICKER_TEXT = "My_Notification";

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notification);

    btnNotify1 = (Button) findViewById(R.id.btnNotify1);
    btnNotify2 = (Button) findViewById(R.id.btnNotify2);
    btnNotify3 = (Button) findViewById(R.id.btnNotify3);

    nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    n = new Notification(R.drawable.ic_launcher, TICKER_TEXT,
        System.currentTimeMillis());
    n.flags = n.flags | Notification.FLAG_AUTO_CANCEL;

    intent = new Intent(this, SecondActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    btnNotify1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            intent.putExtra("call_is_from", "Notification 1");
            pi1 = PendingIntent.getActivity(getApplicationContext(), 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
            n.setLatestEventInfo(getApplicationContext(), "Notification 1",
                "One", pi1);
            nm.notify(1, n);

        }
    });
    btnNotify2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            intent.putExtra("call_is_from", "Notification 2");
            pi2 = PendingIntent.getActivity(getApplicationContext(), 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
            n.setLatestEventInfo(getApplicationContext(), "Notification 2",
                "Two", pi2);
            nm.notify(2, n);

        }
    });
    btnNotify3.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            intent.putExtra("call_is_from", "Notification 3");
            pi3 = PendingIntent.getActivity(getApplicationContext(), 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
            n.setLatestEventInfo(getApplicationContext(), "Notification 3",
                "Three", pi3);
            nm.notify(3, n);

        }
    });
}

1 ответ

Решение

Вы должны убедиться, что каждый из ваших PendingIntentс уникален. Так как вы получаете PendingIntent используя тот же Intent и то же самое requestCode, вы всегда получите то же самое PendingIntent (хотя дополнения разные).

Чтобы убедиться, что каждый из ваших PendingIntents уникален, используйте другой requestCode для каждого, как это:

pi1 = PendingIntent.getActivity(getApplicationContext(), 1,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

pi2 = PendingIntent.getActivity(getApplicationContext(), 2,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

pi3 = PendingIntent.getActivity(getApplicationContext(), 3,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);
Другие вопросы по тегам