版权声明:本文为博主原创文章,未经博主允许不得转载。
前几天项目中有用到 Android 通知相关的内容,索性把 Android Notification 相关的知识都看了一遍,稍作梳理,在此做个总结,以备不时之需。
温故而知新,可以为师矣~
下图是我对 Notification 做的思维导图,也是本文的主要逻辑。

本文主要讲述 Notification 的基本操作部分,进阶部分的内容还在学习ing~
Notification 概述
Notification,是一种具有全局效果的通知,可以在系统的通知栏中显示。当 APP 向系统发出通知时,它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。通知栏和抽屉式通知栏均是由系统控制,用户可以随时查看。下面两张图均是来自 Google 官方文档。

图 1 .通知栏中的通知

图 2 .抽屉式通知栏中的通知
通知的目的是告知用户 App 事件。在平时的使用中,通知主要有以下几个作用:
- 显示接收到短消息、及时消息等信息(如QQ、微信、新浪、短信)
- 显示客户端的推送消息,如广告、优惠、版本更新、推荐新闻等,常用的第三方 SDK 有: JPush 、 个推 、 信鸽 、 网易云信(偏重 IM ) 、 阿里云推送
- 显示正在进行的事物,例如:后台运行的程序,如音乐播放进度、下载进度等
其中,前两点可以归结为与用户交互,第三点是实时的任务提醒,但不可否认的是,第三点也会与用户交互。
Notification 作为 Android 重要的用户界面组成部分,它有自己的设计指南。在 Android 5.0(Api level 21) 中引入的 Material Design 尤为重要。关于 Notification 的设计指南请参考 Notification Pattern
Notification 的概述就这么多,接下去就开始讲 Notification 的基本使用,中间会穿插 Notification 的基本 UI 、各个版本的区别、常见的通知效果以及自己在学习过程中踩到的坑。
Notification 的基本操作
Notification 的基本操作主要有创建、更新、取消这三种。一个 Notification 的必要属性有三项,如果不设置则在运行时会抛出异常:
- 小图标,通过 setSmallIcon() 方法设置
- 标题,通过 setContentTitle() 方法设置
- 内容,通过 setContentText() 方法设置
除了以上三项,其它均为可选项。虽然如此,但还是应该给 Notification 设置一个 Action ,这样就可以直接跳转到 App 的某个 Activity 、启动一个 Service 或者发送一个 Broadcast。否则,Notification 仅仅只能起到通知的效果,而不能与用户交互。
当系统接收到通知时,可以通过震动、响铃、呼吸灯等多种方式进行提醒。
创建 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 兼容性问题处理。文中使用的都是 NotificationCompat。
- Notification : 通知对应类,保存通知相关的数据。NotificationManager 向系统发送通知时会用到。
- NotificationManager : NotificationManager 是通知管理类,它是一个系统服务。调用 NotificationManager 的 notify() 方法可以向系统发送通知。
获取 NotificationManager 对象:
NotificationManager mNotifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- 1
前面讲到,Notification 有三个必要属性。下面,我们就来创建一个简单的 Notification 。主要有以下三步:
- 获取 NotificationManager 实例
- 实例化 NotificationCompat.Builder 并设置相关属性
- 通过 builder.build() 方法生成 Notification 对象,并发送通知
private void sendNotification() {
//获取NotificationManager实例
NotificationManager notifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//实例化NotificationCompat.Builde并设置相关属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
//设置小图标
.setSmallIcon(R.mipmap.icon_fab_repair)
//设置通知标题
.setContentTitle("最简单的Notification")
//设置通知内容
.setContentText("只有小图标、标题、内容")
//设置通知时间,默认为系统发出通知的时间,通常不用设置
//.setWhen(System.currentTimeMillis());
//通过builder.build()方法生成Notification对象,并发送通知,id=1
notifyManager.notify(1, builder.build());
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
以上代码是对 Android 3.0 及之后的版本而言(包括使用 Support Library),对于 Android 3.0 之前的版本,主要使用 new Notification() 方法来创建 Notification 对象,本文不对此方式做任何讲解,代码如下:
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(
this, 0, new Intent(this, ResultActivity.class), 0);
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4