一、概述
通知是指 Android 在您应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的通信信息或您应用中的其他实时信息。用户可以点按通知来打开应用,或直接从通知中执行操作。
二、Notification属性
展示了通知最常见的部分,具体如下所示:
- 小图标:必须提供,通过
setSmallIcon()
进行设置。 - 应用名称:由系统提供。
- 时间戳:由系统提供,但您可以使用
setWhen()
替换它或者使用setShowWhen(false)
隐藏它。 - 大图标:可选内容(通常仅用于联系人照片,请勿将其用于应用图标),通过
setLargeIcon()
进行设置。 - 标题:可选内容,通过
setContentTitle()
进行设置。 - 文本:可选内容,通过
setContentText()
进行设置。
三、创建基本通知
3.1 Android 8.0之前
首先,您需要使用 NotificationCompat.Builder
对象设置通知内容和渠道。
var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(textTitle)
.setContentText(textContent)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val notification = builder.build()
notificationManager.notify(id, notification)
以上方法后面会详细讲解, Android 8.0 和更高版本,必须设置渠道重要性。
3.2 Android 8.0和更高版本
从Android 8.0系统开始,Google引入了通知渠道这个概念。NotificationChannel
其实是把 Notification
分了个类别,设置不同优先级,开关之类的。如果你的 app 适配了的话,用户可以关掉不喜欢的通知,以提高用户体验。
举个🌰:我们开发一个App,这个App有两种通知,一种是聊天通知,比如是他人发给你的消息;另一种是推荐消息,比如是广告推送消息。如果用户想要收到通信通知,屏蔽推荐消息,我们就可以创建两种通知渠道,一个通信,一个推荐,如果用户对推荐类的通知不感兴趣,那么用户就可以直接将推荐通知渠道关闭,这样用户就可以只收到自己关注的通知。
我们可以看一下微信的通知渠道划分:
可以看到微信的通知渠道分为3个,其他通知、新消息通知、还有音视频通话邀请通知。
object NotificationUtil {
private var notificationManager: NotificationManager? = null
/**
* 初始化NotificationManager
*/
fun initNotificationManager(context: Context) {
notificationManager = notificationManager ?: context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
//判断是否为8.0以上:Build.VERSION_CODES.O为26
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//聊天消息渠道
//创建通知渠道ID
val chatChannelId = "chatNotification"
//创建通知渠道名称
val chatChannelName = "聊天消息"
//创建通知渠道重要性
val chatImportance = NotificationManager.IMPORTANCE_HIGH
//创建渠道
val chatChannel = NotificationChannel(chatChannelId, chatChannelName, chatImportance)
notificationManager?.createNotificationChannel(chatChannel)
//推荐消息渠道
//创建通知渠道ID
val recommendChannelId = "recommendNotification"
//创建通知渠道名称
val recommendChannelName = "推荐消息"
//创建通知渠道重要性
val recommendImportance = NotificationManager.IMPORTANCE_DEFAULT
//创建渠道
val recommendChannel = NotificationChannel(recommendChannelId, recommendChannelName, recommendImportance)
notificationManager?.createNotificationChannel(recommendChannel)
}
}
/**
* 通知栏显示
*/
fun