25

我遇到了一个问题,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);
4

3 回答 3

69

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

1) 如果您之前已经创建了 PendingIntent 并且它“匹配”了现有的 PendingIntent,那么您必须指定 PendingIntent.FLAG_UPDATE_CURRENT 标志,否则它不会传递额外内容。“匹配”基于 Intent.filterEquals() 使用的标准,因此请务必阅读那里的文档并确保您了解数据、操作、类型等。

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

于 2011-03-10T07:28:37.447 回答
12

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

于 2011-07-06T05:07:07.353 回答
2

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

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

归功于这个帮助我解决问题的 SO 问题:为什么我的可搜索活动的 Intent.getAction() 为空?

于 2011-01-07T19:38:59.133 回答