Проблема с уведомлением о намерении андроида

У меня есть тревога, которая происходит в моем приложении, и она запускает уведомление, которое затем при нажатии запускает действие. Проблема в том, что когда я создаю более одного аварийного сигнала, тогда активность, запущенная из уведомления, получает те же дополнительные функции, что и первая. Я думаю, что проблема заключается либо в намерении, которое я ставил в ожидании намерения или в самом ожидающем намерениях. Я думаю, мне может понадобиться поставить флаг на одном из них, но я не знаю, какой из них.

Intent showIntent =new Intent(context, notificationreceiver.class);
    showIntent.putExtra("details", alarmname);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
        showIntent, 0); 

    notification.setLatestEventInfo(context, "The event is imminent",
            alarmname, contentIntent);

И получатель уведомления

Bundle b = getIntent().getExtras();
    String eventname = b.getString("details");
    details.setText(eventname);

"Детали" дополнительно являются одинаковыми для каждого следующего раза, когда уведомление происходит вместо того, чтобы иметь другое значение. Пока я не поставил намерения, я уверен, что правильное значение относится к "деталям", поэтому проблема получения первого намерения каждый раз, когда я нажимаю любое уведомление. Как я могу заставить его начать правильные намерения? Надеюсь, я был так же ясен, как мог Спасибо!

Ответ 1

Проблема в том, что когда я создаю больше чем один сигнал тревоги, то активность запущенное из уведомления те же дополнительные, что и первый.

Правильно.

Как я могу заставить его запустить правильные намерения?

Это зависит от того, будет ли у вас два будильника, которые будут зарегистрированы сразу, или нет.

Если нет, вы можете использовать FLAG_ONE_SHOT или один из других флагов PendingIntent, чтобы ваш второй PendingIntent использовал новые дополнительные функции.

Если, однако, у вас будет зарегистрировано сразу два сигнала тревоги, с различными дополнительными настройками Intent, вам нужно будет сделать два Intents более существенными, так что filterEquals() возвращает false при сравнении двух. Например, вы можете вызвать setData() или setAction() и предоставить разные значения для каждого Intent.

Ответ 2

Как я решил эту проблему, назначая уникальный requestCode, когда вы получаете PendingIntent:

PendingIntent.getActivity(context, requestCode, showIntent, 0); 

Таким образом, вы регистрируетесь в разных/уникальных экземплярах системы. Подсказка: Хорошим способом сделать уникальный запрос является то, что он будет передавать текущее системное время.

int requestID = (int) System.currentTimeMillis();

Ответ 3

другое решение:

используйте PendingIntent.FLAG_UPDATE_CURRENT следующим образом:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);

это сработало для меня

Ответ 4

У меня была эта проблема в моем приложении, и я только что сгенерировал случайное число, чтобы переопределить намерения уведомлений:

int random= new Random().nextInt();
PendingIntent resultPendingIntent =
      stackBuilder.getPendingIntent(
              random,
              PendingIntent.FLAG_UPDATE_CURRENT
      );