BroadcastReceiver从通知中接收正确的额外有效负载

时间:2019-08-24 04:40:50

标签: android notifications

我的用例流程:

  1. FirebaseMessagingService向Android发送一个通知请求,例如notif-instance-A,其中包含Extra有效载荷值value-A的动作意图。
  2. FirebaseMessagingService向Android发送第二个通知请求,例如notif-instance-B,其中包含Extra有效载荷值value-B的动作意图。
  3. 如果用户点击notif-instance-A上的“操作”按钮,则我的BroadcastReceiver将会以value-A的意图被触发。
  4. 如果用户点击notif-instance-B上的“操作”按钮,则我的BroadcastReceiver将会以value-B的意图被触发。

注意:#3和#4的顺序可以互换,用户可以按任意顺序点击通知。

如果只有一个通知,例如没有#2,#4的#1 +#3,或者没有#1,#3的#2 +#4。但是,如果涉及到 多个通知 ,则BroadcastReceiver将无法始终如一地获取正确的数据,有时甚至无法触发。以下是我的实验(在Android 8.0 AVD上)的观察结果,方法是将PendingIntent flag传递给PendingIntent.getBroadcast()

  • 0 :有意使用非常陈旧的测试数据(既不是value-A也不是value-B)触发的。
  • FLAG_ONE_SHOT
    • 在步骤#3中轻按notif-instance-A按钮:用value-A触发。
    • 在步骤#4中轻按notif-instance-B按钮:未触发
    • 在步骤#3中轻按notif-instance-B按钮:用value-A触发。
    • 在步骤#4中轻按notif-instance-A按钮:未触发
  • FLAG_NO_CREATE :意图触发非常旧的测试数据(既不是value-A也不是value-B)。
  • FLAG_CANCEL_CURRENT
    • 在步骤3中点击notif-instance-A按钮:未触发
    • 在步骤#4中轻按notif-instance-B按钮:用value-B触发。
    • 在步骤#3中轻按notif-instance-B按钮:用value-B触发。
    • 在步骤#4中轻按notif-instance-A按钮:未触发
  • FLAG_UPDATE_CURRENT :无论用户点击哪个通知,均以value-B触发。
  • FLAG_IMMUTABLE :无论用户点击哪个通知,都以value-A触发。

从实验来看,所有行为都不符合我的用例需求。用例听起来很简单明了,某种程度上我很难使它正常工作。任何线索可能是什么问题?谢谢。

0 个答案:

没有答案