Андроид ожидает уведомления о намерении

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

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

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

Другие вопросы по тегам