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


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

522   4  

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

    Ничего не найдено.