如何正确地将独特的附加内容传递给待处理的意图?

Posted

技术标签:

【中文标题】如何正确地将独特的附加内容传递给待处理的意图?【英文标题】:How can I correctly pass unique extras to a pending intent? 【发布时间】:2011-05-19 10:23:26 【问题描述】:

我遇到了alarmManager 的问题,并且未决意图带有附加功能。

如果我设置了多个闹钟,它们会响起,但附加功能保持不变。

我已经阅读了这些问题:

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

我已经试过了:

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

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

这是一个代码sn-p:

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】:

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

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

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

【讨论】:

在我的未决意图中,我尝试设置 PendingIntent.FLAG_UPDATE_CURRENT,但现在当调用意图时,我收到类似“java.lang.IllegalArgumentException: Can't use FLAG_RECEIVER_BOOT_UPGRADE here”之类的错误 - 否虽然这个 BOOT 标志来自哪里,但我添加的只是 FLAG_UPDATE_CURRENT。你以前有过类似的问题吗? (我在华为 Ideos,2.2) 这篇文章解释了我看到的几个问题,干得好! 对于这个烦人的误导性错误真的很有帮助。标志和设置动作的使用对我有用 我使用不同的 requestCode 值使 filterEquals 将它们视为不同的意图,如下所示:***.com/questions/7496603/…【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于如何正确地将独特的附加内容传递给待处理的意图?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将自定义错误从后端(Express)传递到前端(Vue)

如何正确地将已附加到上下文的实体标记为已修改?

Android:意图通过通知传递给活动......我在意图中没有得到正确的额外内容

如何正确地将 C 数组传递给 C#?

如何正确地将文本文件传递给 NSFileManager

如何正确地将日期时间从 c# 传递到 sql?