Андроид ожидает уведомления о намерении
В моем приложении происходит тревожное событие, и оно запускает уведомление, которое затем при нажатии запускает действие. Проблема в том, что когда я создаю более одного сигнала тревоги, то действие, запущенное из уведомления, получает те же дополнительные функции, что и первый. Я думаю, что проблема либо в намерении, которое я ввел в ожидании, либо в самом ожидании. Я думаю, что мне может понадобиться поставить флаг на одном из них, но я не знаю, какой именно.
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);
Дополнительная информация "Детали" одинакова для каждого следующего уведомления, вместо того, чтобы иметь другое значение. Пока я не установлю намерения, я уверен, что правильное значение переходит к "деталям", поэтому проблема заключается в получении первого намерения каждый раз, когда я нажимаю на любое уведомление. Как я могу сделать это, чтобы запустить правильные намерения? Надеюсь, я был настолько ясен, насколько мог. Спасибо!
4 ответа
Проблема в том, что когда я создаю более одного сигнала тревоги, то действие, запущенное из уведомления, получает те же дополнительные функции, что и первый.
Правильный.
Как я могу сделать это, чтобы запустить правильные намерения?
Это зависит от того, есть ли у вас две тревоги, которые будут зарегистрированы одновременно, или нет.
Если нет, вы можете использовать FLAG_ONE_SHOT
или один из других PendingIntent
флаги, чтобы ваш второй PendingIntent
используйте более новые дополнения.
Однако, если у вас будет зарегистрировано два сигнала тревоги одновременно, с разными Intent
Дополнительно, вам нужно будет сделать два Intents
быть материально иным, таким, чтобы filterEquals()
возвращается false
при сравнении двух. Например, вы можете позвонить setData()
или же setAction()
и предоставить разные значения для каждого Intent
,
Я решил эту проблему, назначив уникальный код запроса, когда вы получаете PendingIntent:
PendingIntent.getActivity(context, requestCode, showIntent, 0);
Тем самым вы регистрируете в системе различные / уникальные экземпляры намерений. Совет: Хороший способ сделать запрос уникальным - передать ему текущее системное время.
int requestID = (int) System.currentTimeMillis();
Я последовал решению, предоставленному U-ramos, и это сработало для меня
int requestID = (int) System.currentTimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestID, showIntent, 0);
У меня была эта проблема в моем приложении, и я просто сгенерировал случайное число, чтобы переопределить намерение переопределить уведомления:
int random= new Random().nextInt();
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
random,
PendingIntent.FLAG_UPDATE_CURRENT
);
другое решение:
используйте PendingIntent.FLAG_UPDATE_CURRENT следующим образом:
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);
это сработало для меня