对于通知栏,大家都不陌生,应该算是设备的基础功能组件了吧,像推送消息,任务提醒,闹钟提示等等都需要借助设备的通知栏展现给用户,所以说一个醒目且友好的通知是很重要的,但是在这个android生态比较混乱的环境下,很多乱七八糟的通知,我明明不想接收,却见天儿的被各种app推送轰炸。
在Android 8.0 之前,有些做得好的厂商会针对每一个app提供一个通知的开关,但是这个权限被关了以后,就再也没法接收到通知了,以致于后面app的任何通知都无法展现给用户,除非用户再次开启app的通知开关。
也许Google意识到了这个问题,所以在Android 8.0上,NotificationChannel 应运而生。针对 targetSdkVersion在26以及上的设备,如果想要显示app通知,必须要注册对应通知的channel,一个app可以注册多个channel,而用户则可以自行设置某一个channel的开关状态,如果某一个channel的通知被关闭,那么该channel的任何通知都不会展现给用户,而其他channel的通知则不受影响
一图了解通知的基本组成
在Android 8.0之前,如果想将消息显示在通知栏上面,基本上是先创建一个 Notification ,然后由NotificationManager直接show() 是没有任何问题的
public void notify(int id) {
Notification notification = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setSmallIcon(getSmallIcon())
.setLargeIcon(getLargeIcon())
.setContentTitle(title)
.setContentText(body)
.setContentIntent(pendingIntent)
.build();
getManager().notify(id, notification);
}
但是如