Как я могу правильно передать уникальные дополнения ожидаемому намерению?

У меня проблема с alarmManager и незаконченным намерением с дополнениями, которые будут сопровождать его.

Если я установлю несколько будильников, они сработают, но дополнительные функции останутся прежними.

Я уже прочитал эти вопросы:

и я пробовал:

  • присвоение уникального идентификатора каждому ожидающему намерению и
  • используя все ожидающие флаги намерений,

все безрезультатно. Я понятия не имею, почему это не сработает.

Вот фрагмент кода:

Intent intent = new Intent(con,
                    AppointmentNotificationReciever.class);
            intent.putExtra("foo", bar.toString());


            int id = randomNum;

            PendingIntent sender = PendingIntent.getBroadcast(con, id,
                    intent, PendingIntent.FLAG_UPDATE_CURRENT);


            AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender);

person ninjasense    schedule 02.12.2010    source источник


Ответы (3)


Возможно, здесь две разные проблемы:

1) Если вы уже создали свой PendingIntent ранее, и он «соответствует» существующему PendingIntent, вы должны указать флаг PendingIntent.FLAG_UPDATE_CURRENT, иначе он не будет передавать дополнительные функции. «Соответствие» основано на критериях, которые использует Intent.filterEquals(), поэтому обязательно прочитайте там документы и убедитесь, что вы понимаете данные, действие, тип и т. д.

2) Я читал, что если вы НЕ настроите действие на свое намерение, то оно не будет распространять дополнительные функции, поэтому, возможно, попробуйте намерение.setAction("com.blah.Action").

person DustinB    schedule 10.03.2011
comment
В своем ожидающем намерении я пытаюсь установить PendingIntent.FLAG_UPDATE_CURRENT, но теперь, когда вызывается намерение, я получаю сообщение об ошибке, например java.lang.IllegalArgumentException: здесь нельзя использовать FLAG_RECEIVER_BOOT_UPGRADE - не знаю, откуда берется этот флаг BOOT, все, что я добавил, это FLAG_UPDATE_CURRENT. У вас была похожая проблема раньше? (у меня Huawei Ideos, 2.2) - person Mathias Conradt; 08.05.2011
comment
Этот пост объяснил несколько проблем, которые я видел, отличная работа! - person Nemanja Kovacevic; 22.05.2014
comment
Действительно полезно для этой раздражающей и вводящей в заблуждение ошибки. У меня сработало использование как флага, так и настройки действия - person Umar Qureshi; 20.10.2014
comment
Я использовал разные значения requestCode, чтобы filterEquals рассматривал их как разные намерения, как предлагается здесь: -false" title="как создать другое ожидающее намерение, чтобы filterequals возвращали false"> stackoverflow.com/questions/7496603/ - person Daniel Lubarov; 29.09.2016

Я столкнулся с похожей проблемой. Использование PendingIntent.FLAG_ONE_SHOT может решить проблему, поскольку это означает, что PendingActivity не будет использоваться повторно.

person Robbie Matthews    schedule 06.07.2011

Это может быть связано с тем, что Activity::getIntent возвращает исходное намерение Activity с учетом определенных флагов/фильтров намерений.

Если это так, вам нужно просмотреть Activity. ::onNewIntent. Переопределите этот метод, и намерение, переданное этой функции, должно быть новым намерением с соответствующими дополнениями и т. д.

Кредит принадлежит этому ТАК-вопросу, который помог мне решить мою проблему: ">Почему Intent.getAction() моей доступной для поиска активности имеет значение null?

person brack    schedule 07.01.2011