概述:
Android O(也就是SDK26版本) 引入了 通知渠道(Notification Channels)以提供统一的系统来帮助用户管理通知,如果是针对 android O 为目标平台时,必须实现一个或者多个通知渠道,以向用户显示通知。若并不以 Android O 为目标平台,当应用运行在 android O 设备上时,其行为将与运行在 Android 7.0 上时相同。
Android O 的用户可以使用一致的系统 UI 管理大多数与通知有关的设置。所有发布至通知渠道的通知都具有相同的行为。当用户修改任何下列特性的行为时,修改将作用于通知渠道:
- 重要性
- 声音
- 光
- 振动
- 在锁屏上显示
- 替换免打扰模式
官方文档:https://developer.android.google.cn/training/notify-user/build-notification
一、Android系统通知基本操作
谷歌原生8.0系统显示如下:
如果向左滑动通知,则会出现两个开关,一个是设置该应用的具体通知规范,另一个可以设置让该应用的通知推迟一段时间推送。
设置具体通知规范:
设置通知休眠时间:
1.1 通知优先级和重要性
Android O 弃用了为单个通知设置优先级的功能。创建通知渠道时可以设置建议重要性级别。为通知渠道指定的重要性级别适用于发布至该渠道的所有通知消息。可以配置五个级别中的一个,这些级别代表着通知渠道可以打断用户的程度,范围是 IMPORTANCE_NONE(0)至 IMPORTANCE_HIGH(4)。默认重要性级别为 3:在所有位置显示,发出提示音,但不会对用户产生视觉干扰。创建通知渠道后,只有系统可以修改其重要性。用户可以在设置中找到。
1.2 创建通知渠道
以下步骤创建通知渠道::
1. 构建一个在软件包内具有唯一 ID 的通知渠道对象。
2. 为该通知渠道对象配置所需的任何初始设置(例如提示音以及对用户可见的可选说明)。
3. 将通知渠道对象提交到通知管理器。
注意:如果试图使用初始值创建的通知渠道已存在,不会执行任何操作,因此启动应用时可以放心地执行以上步骤序列。以下示例代码演示的是如何创建具有低重要性级别和自定义振动模式的通知渠道。
/**
* 创建通知渠道
* @param channel_id 渠道id
* @param channel_name 渠道名称
* @param channel_desc 渠道描述
* @param importance 渠道优先级
* @param group_id 渠道组,若没有渠道组,则传null
*/
@RequiresApi(api = 26)
private void createNotificationChannel(String channel_id, String channel_name,String channel_desc,int importance,String group_id){
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//配置通知渠道id,渠道名称(用户可以看到),渠道优先级
NotificationChannel mChannel = new NotificationChannel(channel_id, channel_name,importance);
//配置通知渠道的描述
mChannel.setDescription(channel_desc);
//配置通知出现时的闪灯(如果 android 设备支持的话)
mChannel.enableLights(true);
mChannel.setLightColor(Color.RED);
//配置通知出现时的震动(如果 android 设备支持的话)
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{
100, 200, 100, 200});
//配置渠道组
if(group_id!=null){
mChannel.setGroup(group_id);//设置渠道组
}
//在NotificationManager中创建该通知渠道
manager.createNotificationChannel(mChannel);
}
可以通过调用 createNotificationChannels(List < NotificationChannel > channels)
一次性创建多个通知渠道。
1.3 创建通知渠道组
如果应用支持多个帐户,则可为每个帐户创建一个通知渠道组。通知渠道组用于对一款应用内的多个同名通知渠道进行管理。例如,一款社交网络应用可能提供面向个人帐户以及企业帐户的支持。在此情境下,每个帐户可能都需要多个功能和名称相同的通知渠道。
一个包括 2 个通知渠道的个人帐户:
• 帖子新增评论的通知。
• 联系人推荐帖子的通知。
一个包括 2 个通知渠道的企业帐户:
• 帖子新增评论的通知。
• 联系人推荐帖子的通知。
在本例中,将与每个用户帐户相关的通知渠道组织成专用组可确保用户能在 Settings 中轻松地进行区分。每个通知渠道组都必须在软件包内具有唯一 ID,并具有用户可见的名称。下面这段代码演示了如何创建两个通知渠道组。