通知(notification)是Android系统中一个比叫有特色的功能。某个应用程序希望向用户发送一些提示信息,而这个应用程序又不在前台运行时,就可以借助通知功能来实现。Android的通知功能一经推出就大获成功,连iOS在5.0版本之后也加入了类似的功能。
🏷 目录
- 获得通知管理器
- 创建一个通知渠道
- 由管理器注册渠道
- 创建一个通知
- 由管理器发送通知
🏃♀️ 步骤
1.获得通知管理器
首先需要一个管理器对通知进行管理,通过调用getSystemService(Context.NOTIFICATION_SERVICE)
方法获取管理器,在这里注意强转型为NotificationManager
。
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
2.创建一个通知渠道
由于之前Android版本开发者对于通知的滥用,导致Android官方在8.0版本时添加了通知渠道这个概念来约束开发者的行为。在8.0及其之后的版本中想要使用通知就必须得添加渠道,并且渠道创建后不可再修改了。
创建通知渠道代码如下:
val channel = NotificationChannel("123", "推广", NotificationManager.IMPORTANCE_DEFAULT)
使用NotificationChannel
类构建一个通知渠道,创建时至少需要以下三个参数:
参数名称 | 参数类型 | 参数说明 |
---|---|---|
渠道ID | String | 可随意定义名称,只需保持全局唯一性 |
渠道名称 | String | 设置里给用户看的,说明该渠道的用途 |
重要等级 | Int | 不同等级决定通知的行为:例如高级点的通知会显示悬浮窗,低等级的则静默通知 (*:当然这只是初始设置,用户之后可随时修改等级) |
3.由管理器注册渠道
用管理器中的createNotificationChannel
函数完成渠道的创建。此时Android Studio会报红线,因为这两行代码都是Android8.0新增的写法,为了兼容还需进行版本判断。得益于Android Studio的智能性,我们只需要根据它的提示按下快捷键alt + enter就能添加相应代码。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel("123", "推广", NotificationManager.IMPORTANCE_DEFAULT)
manager.createNotificationChannel(channel)
}
4.创建一个通知
接下来就是创建有实质性内容的通知了。我们首先需要一个Builder构造器创建Notification对象,但由于Android系统不同版本对通知功能的修改导致通知的API不稳定,所以我们需要一个AndroidX库中的兼容APINotificationCompat
类保证稳定性。
val notification = NotificationCompat.Builder(this, "123")
这个构造类接受两个参数,第一个上下文,第二个发送通知渠道的ID。
接着就是连缀多个设置方法添加实质性的内容,并以build()
结尾完成创建。
val notification = NotificationCompat.Builder(this, "123")
.setContentTitle("通知标题")
.setContentText("通知内容")
// 状态栏显示的小图标
.setSmallIcon(R.drawable.ic_launcher_foreground)
// 通知列表显示的图标
.setLargeIcon(BitmapFactory.decodeResource(resources,R.drawable.ic_launcher_foreground))
.setAutoCancel(true)
.build()
5.由管理器发送通知
最后就是调用管理器的notify()
方法发送通知。
manager.notify(1,notificaftion)
两个参数:
参数名称 | 参数类型 | 参数说明 |
---|---|---|
通知的ID | Int | 需要保持不同 |
Notificaftion的实例 | Notificaftion | 这没什么好说的,想要发送就得传入 |
🌃 效果图:
2020年7月22日 星期三 下午8:36