Как я могу правильно передать уникальные дополнения в ожидании намерения? - PullRequest
23 голосов
/ 03 декабря 2010

У меня проблема с 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);

Ответы [ 3 ]

66 голосов
/ 10 марта 2011

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

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

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

11 голосов
/ 06 июля 2011

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

2 голосов
/ 07 января 2011

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

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

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

...