Android Oreo 中通知的更新

2,705 阅读4分钟

资料来源
Notification Update in Android Oreo
Android 8.0 功能和 API

新特性一览

  • 通知渠道(Notification channel):允许您为要显示的每种通知类型创建用户可自定义的渠道。总之就是通知和广告通过不同的渠道发,用户可以通过系统设置单独禁止某一个

  • 通知标志(Notification badges):就是iOS上那个小红点,不过不一定是红色,也没有数字,但有别的骚操作

  • 休眠(Snoozing):用户可以将通知置于休眠状态,以便稍后重新显示它。重新显示时通知的重要程度与首次显示时相同。应用可以移除或更新已休眠的通知,但更新休眠的通知并不会使其重新显示。其实就是稍后处理。。。

  • 通知超时(Notification timeout):现在,使用 setTimeoutAfter() 创建通知时您可以设置超时。您可以使用此函数指定一个持续时间,超过该持续时间后,通知应取消。如果需要,您可以在指定的超时持续时间之前取消通知。例如,如果你8点钟通知上飞机,但是现在已经12点了,这个通知已经对用户无用了,可以取消掉了。

  • 锁屏排序(Lockscreen Ordering)。就是会根据通知的重要性排序,目前只知道ongoing通知一定是第一个的

  • 通知设置(Notification settings):我也不知道这个是啥,反正我没有试出来,知道的人麻烦告诉我一声。官网原文是这样的:当您使用Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCESIntent 从通知创建指向应用通知设置的链接时,您可以调用 setSettingsText() 来设置要显示的文本。此系统可以提供以下 Extra 数据和 Intent,用于过滤应用必须向用户显示的设置:EXTRA_CHANNEL_ID、NOTIFICATION_TAG 和 NOTIFICATION_ID。

  • 通知清除(Notification dismissal):新的API让你知道是用户移除了还是工具移除了通知,反正我是觉得没啥用了。。。

  • 背景颜色(Colorized):就是在持续通知上设置颜色。比如闹钟响的时候可以设置成自己的颜色,这样用户就能一样把你认出来

  • 消息样式(MessageStyle):现在,使用 MessagingStyle 类的通知可在其折叠形式中显示更多内容。

详细解析

通知渠道(Notification channel)

通知渠道是Android Oreo 通知更新中最重要的一个特性,android 官方认为这是一个gift 给用户还有开发者。简单一点来说就是,以后可以把重要通知和广告通知分别设到不同的渠道散,这样当用户不想要广告通知的时候就不需要把整个通知禁止或者直接把App卸载。

例如,在android o 中,系统会有这个界面

可以看到,用户可以选择关闭某个渠道的通知

创建渠道的只需要3步

  • 使用渠道唯一ID和名字创建
  • 配置渠道
  • 注册渠道到NotificationManager

代码如下

//用唯一的ID创建渠道对象
NotificationChannel adChannel = new NotificationChannel(AD_CHANNEL_ID,
      "广告渠道",
       NotificationManager.IMPORTANCE_DEFAULT);
//初始化channel
adChannel.setLightColor(Color.RED);
//向notification manager 提交channel
NotificationManager notificationManager  = (NotificationManager)
            getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(adChannel);

如果一个应用发送通知的时候没有设置channelId,将会引发崩溃

通知标志(Notification badges)

效果如图

如果不想使用badges,可以通过以下代码设置

//对,这是整个channel 控制的
mChannel.setShowBadge(false);

同时,你也能控制notifications的数字,也就是图片这个

通过以下代码控制

Notification notification = new 
Notification.Builder(MainActivity.this)
    .setNumber(messageCount)

通知清除(Notification dismissal)

API 26 中添加了这个方法

onNotificationRemoved

Parameters
sbn StatusBarNotification:一种数据结构,封装至少用于发布的原始信息(标签和ID)和源(包名称)
rankingMap NotificationListenerService.RankingMap:当前排名地图可用于检索活动通知排名信息。
reason int:REASON_LISTENER_CANCEL,等

通过判断第三个参数是REASON_CANCEL还是REASON_LISTENER_CANCEL就可以知道是用户删除还是系统删除了,然而我并不知道有啥用[doge]

背景颜色(Colorized)

设置背景颜色需要三要素

  1. 必须是ongoing notification
  2. 通过setColor,也就是用来设置LED灯的API设置颜色
  3. 通过setColorRized(true) 来开启

以下是示例代码

//当然这个代码是不能创建通知
Notification notification = new Notification.Builder(this,AD_CHANNEL_ID)
                .setOngoing(true)
                .setColor(Color.RED)
                .setColorized(true)
                .build();

锁屏排序(Lockscreen Ordering)

系统自动通过setCategory(),setPriority()addPersion()进行排序

消息样式(MessageStyle)

支持在折叠中显示更多的文字

求关注

如果我总结得不错,不妨关注一下我的微信号,每周更新安卓开发最新的资讯

-c