Как я могу правильно передать уникальные дополнения в ожидании намерения?
У меня проблема с alarmManager
и ожидаемое намерение с дополнениями, которые будут сопровождать его.
Если я установлю несколько будильников, они сработают, но дополнительные функции останутся прежними.
Я уже прочитал в эти вопросы:
- Андроид ожидает уведомления о намерении
- Android продолжает кешировать мои намерения Дополнения, как объявить ожидающее намерение, которое сохраняет свежие дополнения?
и я попробовал:
- присвоение уникального идентификатора каждому ожидающему намерению и
- используя все ожидающие флаги намерения,
все безрезультатно. Я понятия не имею, почему это не будет работать.
Вот фрагмент кода:
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?