如何才能正确地将唯一的附加内容传递给待处理的意图?

时间:2010-12-02 22:01:00

标签: android android-intent alarmmanager android-pendingintent extras

我遇到了alarmManager的问题以及与其一起使用的附加内容的待处理意图。

如果我设置多个闹钟,它们将会关闭,但附加功能保持不变。

我已经读过这些问题了:

我尝试过:

  • 为每个待处理的意图分配唯一ID
  • 使用所有待处理的意图标志,

一切都无济于事。我不知道为什么它不起作用。

以下是代码段:

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 个答案:

答案 0 :(得分:66)

这里可能有两个不同的问题:

1)如果您之前已经创建了PendingIntent,那么它就会匹配"在现有的PendingIntent中,您必须指定PendingIntent.FLAG_UPDATE_CURRENT标志,否则它将不会传递额外内容。 A"匹配"基于Intent.filterEquals()使用的标准,所以一定要阅读那里的文档,并确保你理解数据,动作,类型等。

2)我已经读过,如果你没有对你的意图设置一个动作,那么它就不会传播额外的东西,所以也许尝试一下intent.setAction(" com.blah.Action" )。

答案 1 :(得分:11)

我遇到了类似的问题。使用 PendingIntent.FLAG_ONE_SHOT 可以解决问题,因为这意味着不会重复使用PendingActivity。

答案 2 :(得分:2)

这可能是由于Activity :: getIntent在给定某些意图标记/过滤器的情况下返回Activity的原始意图。

如果是这种情况,您需要查看Activity::onNewIntent。覆盖该方法,传递给该函数的意图应该是具有适当附加功能的新意图等。

归功于这个帮助我解决问题的问题:Why is my searchable activity's Intent.getAction() null?