我怎样才能正确传递独特的额外事项,以待处理的意图?

我遇到了一个与alarmManager和挂起的意图与extras将与之一起的问题。

如果我设置了多个闹钟,他们将会closures,但附加function保持不变。

我已经读过这些问题:

  • android等待意图通知问题
  • Android继续caching我的意图额外,如何申报一个待定的意图,保持新鲜的额外?

我曾试过:

  • 为每个未决意图分配一个唯一的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); 

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

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

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

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

这可能是由于Activity :: getIntent返回给定的意图标志/filter的活动的初衷。

如果这是你的情况,你需要看看Activity :: onNewIntent 。 重写该方法,并传递给该函数的意图应该是新的意图与适当的额外,等等

信贷去这个SO问题,帮助我解决我的问题: 为什么我的search活动的Intent.getAction()为空?

Interesting Posts