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