在日常使用Android手机的过程中,我们经常会遇到被各种通知轰炸的情况。大量的通知,极大的降低了使用体验,同时也将真正有用的信息淹没。虽然手机可以屏蔽这些通知,但是一旦屏蔽,应用里重要的通知也无法再提示,让人进退两难。
面对这种情况,google在Android8.0系统中开始对其进行改进优化。
在Android8.0中,google引入了通知渠道的概念。每个应用都可以创建自己的通知渠道,发送通知时,通知也需要指定相应的渠道。这些通知渠道有用户控制,用户可以对不同的渠道设置不同的重要级,也可以对不同的渠道进行开启和关闭,这样就可以将部分不重要的通知进行屏蔽。
渠道创建
要想使用最新的通知渠道,首先需要将项目的targetSdkVersion大于26,当然,如果你想直接兼容之前版本避免渠道的使用,也可以通过修改targetSdkVersion小于25实现。
1 | private val channel1="default" |
创建渠道的方式也很简单,指定渠道的id、名字和重要性即可。渠道创建之后会一直存在,并且重复创建时也不会出现重复渠道,直到渠道删除。
1 | val notificationManager=getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager |
渠道创建之后无法修改,用户可以在应用的设置中修改通知,用户一旦修改渠道的重要性后,程序无法再次对其修改,即使删除渠道再创建也不行,除非创建不同id的渠道。
渠道重要性
渠道的重要性主要是6级,IMPORTANCE_DEFAULT,IMPORTANCE_HIGH,IMPORTANCE_LOW,**IMPORTANCE_MAX, ** IMPORTANCE_MIN ,IMPORTANCE_NONE。但是实际上的重要性是四级。
因此实际上,IMPORTANCE_HIGH和IMPORTANCE_MAX对应紧急的重要性,IMPORTANCE_DEFAULT对应高的重要性,IMPORTANCE_LOW对应中,而IMPORTANCE_NONE和IMPORTANCE_MIN对应低;
重要性一旦被用户手动修改后,程序无法再调整其重要性,除非创建不同的渠道,同时在设置中会显示程序删除的通道数量。
这些重要性分别是怎样的效果呢?
低:程序不会有任何视觉和声音的提示,除非用户将整个通知栏滑开才能看到;
中:程序不会有声音提示,但是会在通知栏上显示图标;
高:程序会有声音提示,并且会在通知栏上提示图标;
紧急:程序会提示声音,并且会直接弹出窗口提示用户;
发送渠道通知
发送通知时需要将通知指定相应的渠道:
1 | val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager |
用户可以通过优化,对通知设置静默时间,那么在该时间段内,该渠道的通知就都会被屏蔽。
设置数字
Android8.0可以直接在发送通知时设置图标数字
1 | val notification = NotificationCompat.Builder(this, channel1) |
不过具体到实际的设备中时,很多的设备可以设置是否显示图标数字。