PendingIntent requestCode flags

作者: 蛋黄酥酥 | 来源:发表于2016-05-05 11:23 被阅读2871次

在使用PendingIntent向Activity和BroadcastReceiver传递内容时遇到的坑,记录下来。

  1. 使用alarmManager,通过PendingIntent向broadcastReceiver传递内容。
    源码:
public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, @Flags int flags) {
  return getBroadcastAsUser(context, requestCode, intent, flags, newUserHandle(UserHandle.myUserId()));
}

第二个参数requestCode相同的话后面的定时器会将前面的定时器"覆盖"掉,只会启动最后一个定时器,所以同一时间的定时器可以用同一个requestCode,不同时间的定时器用不同的requestCode。

<br />

  1. 使用notification,通过PendingIntent向Activity传递内容。
    源码:
public static PendingIntent getActivity(Context context, int requestCode, Inten tintent, @Flags int flags) {
  return getActivity(context, requestCode, intent, flags, null);
}

第二个参数requestCode不同,以及设置最后一个flags参数为PendingIntent.FLAG_UPDATE_CURRENT可以保证每次点击notification进入activity,传的参数都是当前这个notification传过去的(Intent里附带的参数)。如果requestCode相同,最后一个参数为PendingIntent.FLAG_UPDATE_CURRENT,那么所有未点击的notification里的参数都会被更新为最后一个传过去的,也就是最新的。

flags的取值有四个:
FLAG_ONE_SHOT:获取的PendingIntent只能使用一次
FLAG_NO_CREATE:利用FLAG_NO_CREAT获取的PendingIntent,若描述的Intent不存在则返回NULL值
FLAG_CANCEL_CURRENT:如果描述的PendingIntent已经存在,则在产生新的Intent之前会先取消掉当前的
FLAG_UPDATE_CURRENT:能够新new一个 Intent

举个栗子:
通过notification向activity传递一个数字,第一个通知传递1,第二个通知传递2。(notification的notifyCode不同,保证两个notification都能显示出来)现在两个通知均是弹出来未点击状态。
点击测试结果如下:

flags requestCode 结果 说明
FLAG_ONE_SHOT 相同 先点击通知1,获取到数字1;再点击通知2,无效(通知消失) 。
先点击通知2,获取到数字1;再点击通知1,无效(通知消失)。
只能获取一次最旧的
同上 不同 先点击通知1,获取到数字1;再点击通知2,获取到数字2。
先点击通知2,获取到数字2;再点击通知1,获取到数字1。
获取到对应的
FLAG_NO_CREATE 相同 先点击通知1,无效(通知不消失);再点击通知2,无效(通知不消失)。
先点击通知2,无效(通知不消失);再点击通知1,无效(通知不消失)
NULL
同上 不同 同上 NULL
FLAG_CANCEL_CURRENT 相同 先点击通知1,无效(通知消失);再点击通知2,获取到数字2。
先点击通知2,获取到数字2;再点击通知1,无效(通知消失)。
只有最新的有效
同上 不同 先点击通知1,获取到数字1;再点击通知2,获取到数字2。
先点击通知2,获取到数字2;再点击通知1,获取到数字1。
获取到对应的
FLAG_UPDATE_CURRENT 相同 先点击通知1,获取到数字2;再点击通知2,获取到数字2。
先点击通知2,获取到数字2;再点击通知1,获取到数字2。
获取到最新的
同上 不同 先点击通知1,获取到数字1;再点击通知2,获取到数字2。
先点击通知2,获取到数字2;再点击通知1,获取到数字1。
获取到对应的

相关文章

网友评论

    本文标题:PendingIntent requestCode flags

    本文链接:https://www.haomeiwen.com/subject/yjddrttx.html