Android PendingIntent详解

PendingIntent主要有下面几个静态方法(当然还有其它方法)

PendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags)             --->启动Activity

PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)        --->启动Broadcast

PendingIntent.getService(Context context, int requestCode, Intent intent, int flags)            --->启动Service

第一个参数:连接上下文的context

第二个参数:对PendingIntent的请求码描述;请求值不同,Intent就不同

第三个参数:一个Intent对象,包含跳转目标

第四个参数:有4种状态

FLAG_ONE_SHOT
当前描述的PendingIntent只能被使用一次,然后它就会被自动cancel,如果后续还有相同的PendingIntent,那么它们的send方法就会调用失败。对于通知栏消息来说,如果用此标记位,那么同类的通知也只能使用一次,后续的通知单机后将无法打开。
FLAG_NO_CREATE
当前描述的PendingIntent不会主动创建,如果当前PendingIntent之前不存在,那么getActivity、getService和getBroadcast方法会直接返回null,即获取PendingIntent失败。这个标记位很少见,它无法单独使用,因此在日常开发中它并没有太多的使用意义
FLAG_CANCEL_CURRENT
当前描述的PendingIntent如果已经存在,那么它们都会被cancle,然后系统会创建一个新的PendingIntent。对于通知栏消息来说,那么被cancel的消息单击后将无法打开。
FLAG_UPDATE_CURRENT
当前描述的PendingIntent如果已经存在,那么它们都会被更新,即它们的Intent中的Extras会被替换成最新的。

如果两个PendingIntent它们内部的Intent相同并且requestCode也相同,那么这两个PendingIntent就是相同的。requestCode相同比较好理解,那么什么情况下Intent相同呢?Intent的匹配规则是:如果两个Intent的ComponentName和intent-filter都相同,那么这两个Intent就是相同的。需要注意的是Extras不参与Intent的匹配过程,只要Intent之间的ComponentName和intent-filter相同,即使它们的Extras不同,那么这两个Intent也是相同的。

注意:FLAG_CANCEL_CURRENT、FLAG_UPDATE_CURRENT区别:如果已经存在Notification1、Notification2,二者的PendingIntent一致,但是Extras数据不一致。此时,启动另一个Notification3,Notification3与Notification1、Notification2的PendingIntent也一样。如果使用FLAG_CANCEL_CURRENT,那么Notification1、Notification2的PendingIntent会被取消;如果使用FLAG_UPDATE_CURRENT,那么Notification1、Notification2的PendingIntent会被更新。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值