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

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

Решение

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

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

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

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

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

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

Credit goes to this SO question that helped me to solve my problem: Why is my searchable activity's Intent.getAction() null?

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