如何正确地将独特的附加内容传递给待处理的意图?
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)