Android 8.0系统的通知栏适配

今天早上看到郭霖大神公众号推送了一篇文章:Android 8.0的通知栏适配,自己做个记录

我们知道,Android 8.0系统的最大改进就是通知栏适配和应用图标,关于应用图标的适配在后续文章中记录,现在先记录一下通知栏的适配

google从8.0开始,引入了通知渠道这个概念,通知渠道就是指每一条通知都要属于一个对应的渠道。每个App可以自由地创建当前App拥有哪些通知渠道,但是这些通知渠道的控制权掌握在用户手上,用户可以自由地选择这些通知渠道的重要程度,例如:是否震动、是否响铃、是否要关闭这个渠道的通知等等。

拥有了这些渠道的控制权后,用户就可以自由地控制这些通知消息了,也就不用害怕垃圾消息的推送了。但是同时对产品设计中提出了很高的要求,需要仔细划分通知的不同渠道,因为通知渠道一旦创建好就不可以更改了。

google对通知渠道的适配是比较强硬的:

首先,如果你升级了appcompat库,那么所有使用appcompat库来构建通知的地方全部都会进行废弃方法提示,如下所示:

Android 8.0系统的通知栏适配_第1张图片

上图告诉我们,此方法已废弃,需要使用带有通知渠道的方法才行。

当然,Google也并没有完全做绝,即使方法标为了废弃,但还是可以正常使用的。可是如果你将项目中的targetSdkVersion指定到了26或者更高,那么Android系统就会认为你的App已经做好了8.0系统的适配工作,当然包括了通知栏的适配。这个时候如果还不使用通知渠道的话,那么你的App的通知将完全无法弹出。因此这里给大家的建议就是,一定要适配。

接下来,就是适配的方法:


在这里,通知渠道的channelId可以任意定义,但是要保证全局唯一。渠道名是给用户看的,只要能表达清楚渠道的用途就OK。重要等级的不同会决定渠道的不同行为,但是这里只是初始值,用户会在使用App过程中修改这个重要程度的,App端无法干预。

创建通知渠道的代码可以写在程序的任何位置,只要保证在通知弹出前调用就OK了。

触发通知的代码和之前写的没有任何区别,只是要在构建通知对象的时候,需要传入通知渠道ID,标识通知是属于哪个渠道的。

Notification notification = new NotificationCompat.Builder(this,"chat")//各种设置
        .build();

这样就可以触发通知了。

参考链接:https://mp.weixin.qq.com/s/Ez-G_9hzUCOjU8rRnsW8SA


你可能感兴趣的:(技术总结)