Проблема с уведомлением о намерении андроида
У меня есть тревога, которая происходит в моем приложении, и она запускает уведомление, которое затем при нажатии запускает действие.
Проблема в том, что когда я создаю более одного аварийного сигнала, тогда активность, запущенная из уведомления, получает те же дополнительные функции, что и первая. Я думаю, что проблема заключается либо в намерении, которое я ставил в ожидании намерения или в самом ожидающем намерениях. Я думаю, мне может понадобиться поставить флаг на одном из них, но я не знаю, какой из них.
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
);