基础用途概述
Notification,是一种具有全局效果的通知,可以在系统的通知栏中显示。当 APP 向系统发出通知时,它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。通知栏和抽屉式通知栏均是由系统控制,用户可以随时查看。
通知与四大组件的关系:
比如音乐播放器中,后台播放音乐,由于 service 是在后台运行,所以意图做什么我们看不到,这个时候可以通过 Notificaiton 来显示提醒。
同样,在音乐播放器中,程序在后台运行,点击音乐播放器的通知栏上的上一曲,下一曲等,那么可以让 service 服务和 BroadcastReceiver 广播相结合
Intent 作为意图处理,和 Notificaiton 的点击时间紧密结合在了一起,并且与 BroadcastReceiver 和 service 的联系也紧密不可以分割。
(service 在后台之后通过 BroadcastReceiver 来通知 Notificaiton 显示相关东西,在通过 Intent 完成用户的意图操作)
常见的用途:
1 显示接收到短消息、及时消息等信息(如QQ、微信、新浪、短信)
2 显示客户端的推送消息,如广告、优惠、版本更新、推荐新闻等,常用的第三方 SDK 有: JPush 、 个推 、 信鸽 、 网易云信(偏重 IM ) 、 阿里云推送
3 显示正在进行的事物,例如:后台运行的程序,如音乐播放进度、下载进度等
Notification的基本使用
通知栏主要的类:Notification 和 NotificationManager
NotificationManager : 是状态栏通知的管理类,负责发通知、清除通知等操作。
Notification 为通知信息类,它里面对应了通知栏的各个属性【备注:使用建造者模式构建 Notification 对象。由于 Notification.Builder 仅支持 Android 4.1及之后的版本,为了解决兼容性问题, Google 在 Android Support v4 中加入了 NotificationCompat.Builder 类。
Notification创建必要的属性,必须添加的属性:
小图标,通过 setSmallIcon() 方法设置
标题,通过 setContentTitle() 方法设置
内容,通过 setContentText() 方法设置
Notification 创建步骤:
Notification 的创建主要涉及到 Notification.Builder 、Notification 、NotificationManager。
Notification.Builer : 使用建造者模式构建 Notification 对象。由于 Notification.Builder 仅支持 Android 4.1及之后的版本,为了解决兼容性问题, Google 在 Android Support v4 中加入了 - NotificationCompat.Builder 类。对于某些在 Android 4.1 之后才特性,即使 NotificationCompat.Builder 支持该方法,在之前的版本中也不能运行。
Notification : 通知对应类,保存通知相关的数据。
NotificationManager : NotificationManager 是通知管理类,向系统发送通知时会用到。它是一个系统服务。调用 NotificationManager 的 notify() 方法可以向系统发送通知。
Notification 创建代码:
1 创建NotificationManager
创建NotificationManager
2 创建Notification.Builder,使用的是建造者模式
创建Notification.Builder
3 创建PendingIntent,处理点击通知之后的逻辑
创建PendingIntent
4 给Notification.Builder设置PendingIntent,然后发送通知
发送通知
Notification自定义布局(RemoteViews)
1 创建RemoteViews,并设置点击监听
创建RemoteViews
根据requestCode创建PendingIntent
2 把通知栏布局设置为remoteViews,就完成了自定义通知栏
设置通知栏布局
Notification细节
更新 Notification
更新通知很简单,只需要再次发送相同 ID 的通知即可,如果之前的通知还未被取消,则会直接更新该通知相关的属性;如果之前的通知已经被取消,则会重新创建一个新通知。
更新通知跟发送通知使用相同的方式。
取消 Notification
点击通知栏的清除按钮,会清除所有可清除的通知
设置了 setAutoCancel() 或 FLAG_AUTO_CANCEL 的通知,点击该通知时会清除它
通过 NotificationManager 调用 cancel(int id) 方法清除指定 ID 的通知
通过 NotificationManager 调用 cancel(String tag, int id) 方法清除指定 TAG 和 ID 的通知
通过 NotificationManager 调用 cancelAll() 方法清除所有该应用之前发送的通知
注意事项
如果你是通过 NotificationManager.notify(String tag, int id, Notification notify) 方法创建的通知,那么只能通过 NotificationManager.cancel(String tag, int id) 方法才能清除对应的通知,调用NotificationManager.cancel(int id) 无效。
设置 flag 属性
设置 FLAG_NO_CLEAR 表示设置通知不能被状态栏的清除按钮给清除掉,也不能被手动清除,但能通过 cancel() 方法清除notification.flags |= Notification.FLAG_NO_CLEAR;
取消全部通知:
if(mNotificationManager!=null){
mNotificationManager.cancelAll();
}
设置 Notification 的通知效果
Notification 有震动、响铃、呼吸灯三种响铃效果,可以通过 setDefaults(int defualts) 方法来设置。 Default 属性有以下四种,一旦设置了 Default 效果,自定义的效果就会失效。
//设置系统默认提醒效果,一旦设置默认提醒效果,则自定义的提醒效果会全部失效。具体可看源码//添加默认震动效果,需要申请震动权限//
Notification.DEFAULT_VIBRATE
//添加系统默认声音效果,设置此值后,调用setSound()设置自定义声音无效
Notification.DEFAULT_SOUND
//添加默认呼吸灯效果,使用时须与 Notification.FLAG_SHOW_LIGHTS 结合使用,否则无效
Notification.DEFAULT_LIGHTS
//添加上述三种默认提醒效果
Notification.DEFAULT_ALL
除了以上几种设置 Notification 默认通知效果,还可以通过以下几种 FLAG 设置通知效果。
//提醒效果常用 Flag//三色灯提醒,在使用三色灯提醒时候必须加该标志符
Notification.FLAG_SHOW_LIGHTS
//发起正在运行事件(活动中)
Notification.FLAG_ONGOING_EVENT
//让声音、振动无限循环,直到用户响应 (取消或者打开)
Notification.FLAG_INSISTENT
//发起Notification后,铃声和震动均只执行一次
Notification.FLAG_ONLY_ALERT_ONCE
//用户单击通知后自动消失
Notification.FLAG_AUTO_CANCEL
//只有调用NotificationManager.cancel()时才会清除
Notification.FLAG_NO_CLEAR
//表示正在运行的服务
Notification.FLAG_FOREGROUND_SERVICE
写在最后
android o和android p对通知栏的改动频繁,如需适配可以查阅官方文档。
http://developer.android.com/design/patterns/notifications.html