Android PendingIntent简介

PendingIntent表示接下来会有一个intent将在某个待定的时刻发生,区别于intent会立刻发生。

PendingIntent使用的典型场景是给RemoteViews添加单击事件,因为RemoteViews运行在远程进程中,所以无法直接使用setOnClickListener来设置单击事件,而PendingIntent可以使用send和cancel来发生和取消待定的intent。

PendingIntent支持三种待定意图:启动Activity,启动Service和发生广播。


requestCode:表示PendingIntent发送方的请求码,多数情况下设为0即可,requestCode会影响flags的效果

flags:常见类型

FLAG_ONE_SHOT:当前描述的PendingIntent只能使用一次,然后会被自动cancel,如果后续还有相同的PendingIntent,那么它们的send函数会失败。对于通知栏而言,如果采用此标志位,那么同类的通知只能使用一次,后期通知的单击后将无法打开。

FLAG_NO_CREATE:当前描述的PendingIntent不会主动创建,如果当前的PendingIntent不存在,那么getActivity,getService,getBroadcast会直接返回null。

FLAG_CANCEL_CURRENT:当前描述的PendingIntent如果已经存在,那么它们都会被cancel,然后系统创建一个新的。对于通知栏而言,那些被cancel 的消息会无法打开。

FLAG_UPDATE_CURRENT:当前描述的PendingIntent如果已经存在,那么它们会被更新,即它们的Intent中的Extras会被替换成最新的。


PendingIntent相同:如果两个PendingIntent内部的Intent相同并且requestCode相同,那么这两个PendingIntent相同。

Intent匹配:如果两个Intent的ComponentName和intent-fileter相同,那么两个Intent相同。(Extras不参加匹配过程)


requestCode会影响flags的效果的影响:

代码:

manager.notify(1,notification)

如果notify的id是常量,那么不管PendingIntent是否匹配,后面的通知会直接替换前面的通知。

如果notify的id每次不同,那么当PendingIntent不匹配时,不管采用什么标志位通知之间互不干扰。

如果notify的id每次不同,当PendingIntent匹配时,采用FLAG_ONE_SHOT,后续通知的PendingIntent会和第一条通知保持完全一致,包括Extras,单击任意一个通知,其他的均无法打开,当所有的通知被清除时,重复这个过程。采用FLAG_CANCEL_CURRENT,那么只有最新的通知可以打开,妻女都不可以。采用FLAG_UPDATE_CURRENT,那么之前弹出的通知会被更新,最终和最新的一条保持完全一致,包括Extras,所有这些通知都可以打开。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值