通知主要有以下几个作用:
显示接收到短消息、及时消息等信息(如QQ、微信、新浪、短信)
显示客户端的推送消息,如广告、版本更新、推荐新闻等,常用的第三方 SDK 有: JPush
显示正在进行的事物,例如:后台运行的程序,如音乐播放进度、下载进度等

一个 Notification 的必要属性有三项,如果不设置则在运行时会抛出异常:
小图标,通过 setSmallIcon() 方法设置
标题,通过 setContentTitle() 方法设置
内容,通过 setContentText() 方法设置

创建Notification

Notification 的创建主要涉及到 Notification.Builder 、 Notification 、 NotificationManager 。
Notification.Builer : 使用建造者模式构建 Notification 对象。
Notification : 通知对应类,保存通知相关的数据。NotificationManager 向系统发送通知时会用到。
NotificationManager : NotificationManager 是通知管理类,它是一个系统服务。调用 NotificationManager 的 notify() 方法可以向系统发送通知。
Android知识点(八)之通知

PendingIntent

Intent是立刻实现某一个活动、PendingIntent是在将来某个不确定的时刻发生
RemoteViews无法为View设置点击事件,必须使用PendingIntent,PendingIntent通过send和cancel方法来发送和取消特定的待定Intent
Android知识点(八)之通知
Android知识点(八)之通知

匹配规则

PendingIntent的匹配规则为:如果两个PendingIntent 它们内部的Intent 相同并且requestCode也相同,那么这两个PendingIntent就是相同的。 Intent 的匹配规则是:如果两个Intent 的ComponentName和inten-iter都相同,那么这两个Intent 就是相同的。需要注意的是Extras不参与Intent
的匹配过程,只要Intent 之间的ComponentName和intent-filter相同,即使它们的Extras不同,那么这两个Intent也是相同的。

Manager.notify(id,notification)

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

下面分析manager.notify(id,notification)

  1. 如果传入的id是个常量,不管PendingIntent是否匹配,新的通知都会替代前面的;
  2. 如果传入的id每次不同:
    • 如果PendingIntent不匹配时,不管使用何种flag,各个通知之间不会相互干扰;

    • 如果PendingIntent匹配时:
      如果采用了FLAG ONE SHOT标记位那么后续通知中的PendingIntent会和第一条通知保持完全一致,包括其中的Extras,单击任何一条通知后,剩下的通知均无法再打开,当所有的通知都被清除后,会再次重复这个过程

      如果采用FLAG_CANCEL_CURRENT标记位。那么只有最新的通知可以打开,之前弹出的所有通知均无法打开

      如果采用FLAG_UPDATE_CURRENT标记位。那么之前弹出的通知中的PendingIntent会被更新,最终它们和最新的一条通知保持完全一 致, 包括其中的Extras,并且这些通知都是可以打开的。

取消Notification

Android知识点(八)之通知

高级设置

Android知识点(八)之通知

相关文章: