How can I correctly pass unique extras to a pending intent?

浪子不回头ぞ 提交于 2019-11-26 12:19:24

问题


I\'m having a problem with alarmManager and the pending intent with extras that will go along with it.

If I set multiple alarms, they will go off, however the extras stay the same.

I have already read into these questions:

  • android pending intent notification problem
  • Android keeps caching my intents Extras, how to declare a pending intent that keeps fresh extras?

and I have tried:

  • assigning a unique ID to each pending intent and
  • using all the pending intent flags,

all to no avail. I have no clue why it will not work.

Here is a code snippet:

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

回答1:


Possibly two different issues here:

1) If you've already created your PendingIntent before and it "matches" an existing PendingIntent, then you must specify the PendingIntent.FLAG_UPDATE_CURRENT flag or it will not pass the extras. A "match" is based on the criteria that Intent.filterEquals() uses, so definitely read the docs there and make sure you understand the data, action, type, etc.

2) I've read that if you do NOT set an action on your intent, then it will not propagate the extras, so perhaps try intent.setAction("com.blah.Action").




回答2:


I've run into a similar problem. Using PendingIntent.FLAG_ONE_SHOT may solve the problem, because it means the PendingActivity won't be reused.




回答3:


This could be due to Activity::getIntent returning the Activity's original intent given certain intent flags/filters.

If that is the case for you, you'll need to look at Activity::onNewIntent. Override that method, and the intent passed to that function should be the new intent with proper extras, etc.

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



来源:https://stackoverflow.com/questions/4340431/how-can-i-correctly-pass-unique-extras-to-a-pending-intent

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!