Проблема уведомления об ожидающем намерении андроида

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

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

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

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

Верный.

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

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

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

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

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

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

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

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

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

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

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

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

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

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