Андроид ожидает уведомления о намерении - PullRequest
72 голосов
/ 09 июня 2010

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

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 ]

116 голосов
/ 14 мая 2011

Я решил эту проблему, назначив уникальный requestCode при получении PendingIntent:

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

Тем самым вы регистрируете в системе различные / уникальные экземпляры намерений. Совет: Хороший способ сделать код запроса уникальным - передать ему текущее системное время.

int requestID = (int) System.currentTimeMillis();
68 голосов
/ 10 июня 2010

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

Правильно.

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

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

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

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

0 голосов
/ 22 октября 2015

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

int random= new Random().nextInt();
PendingIntent resultPendingIntent =
      stackBuilder.getPendingIntent(
              random,
              PendingIntent.FLAG_UPDATE_CURRENT
      );
0 голосов
/ 27 января 2015

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

используйте PendingIntent.FLAG_UPDATE_CURRENT вот так:

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

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

...