【Interface&navigation】创建和管理通知渠道(41)


从Android 8.0(API级别26)开始,必须将所有通知分配给通道。对于每个频道,您可以设置应用于该频道中所有通知的视觉和听觉行为。然后,用户可以更改这些设置,并确定应用中哪些通知渠道应该是侵入式或可见的。

请查看下面的视频,了解Android 8.0中频道和其他新通知功能的概述。

通知通道的用户设置可用于系统设置中的每个应用程序,如图1所示。
【Interface&navigation】创建和管理通知渠道(41)
图1. Clock应用程序及其中一个通道的通知设置

注意:用户界面将通知渠道称为“类别”。

创建通知通道后,您无法更改通知行为 - 用户在此时具有完全控制权。虽然您仍然可以更改频道的名称和说明。

您应该为需要发送的每种不同类型的通知创建一个频道。您还可以创建通知渠道,以反映应用用户的选择。例如,您可以为用户在消息传递应用中创建的每个会话组设置单独的通知通道。

当您定位到Android 8.0(API级别26)时,您必须实现一个或多个通知渠道。如果您targetSdkVersion的设置为25或更低,当您的应用在Android 8.0(API级别26)或更高版本上运行时,其行为与运行Android 7.1(API级别25)或更低版本的设备上的行为相同。

警告:如果您定位Android 8.0(API级别26)并在未指定通知通道的情况下发布通知,则不会显示通知,系统会记录错误。

注意:您可以在Android 8.0(API级别26)中启用新设置,以显示屏幕警告,当针对Android 8.0(API级别26)的应用尝试在没有通知渠道的情况下发布时,该警告会显示为 吐司。要打开运行Android 8.0(API级别26)的开发设备的设置,请导航到“设置” >“ 开发人员选项”并启用“ 显示通知通道警告”。

创建通知渠道


要创建通知渠道,请按以下步骤操作:

构造NotificationChannel具有唯一通道ID,用户可见名称和重要性级别的对象。
(可选)指定用户在系统设置中看到的描述setDescription()。
通过将通知通道注册到注册通知通道createNotificationChannel()。

警告:您应该保护此代码,并且SDK_INT版本上的条件 仅在Android 8.0(API级别26)及更高版本上运行,因为支持库中没有通知通道API。

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviors after this
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

使用原始值创建现有通知通道不会执行任何操作,因此在启动应用程序时调用此代码是安全的。

默认情况下,发布到此频道的所有通知都使用由类中的重要性级别定义的视觉和听觉行为NotificationManagerCompat,例如IMPORTANCE_DEFAULT和IMPORTANCE_HIGH。(有关重要性级别的更多信息,请参见下文。)

如果您想进一步定制频道的默认通知的行为,你可以调用的方法,如 enableLights(), setLightColor()和setVibrationPattern()上NotificationChannel。但请记住,一旦创建了频道,就无法更改这些设置,用户可以最终控制这些行为是否处于活动状态。

您还可以通过调用在单个操作中创建多个通知通道createNotificationChannels()。

注意:除了将每个通知添加到特定于应用程序的渠道之外,您还应考虑将每个通知添加到系统范围的某个 类别(例如“警报”和“提醒”)。

设置重要性级别

通道重要性会影响通道中发布的所有通知的中断级别,您必须在NotificationChannel构造函数中指定它。您可以使用五个重要级别之一,从 IMPORTANCE_NONE(0)到 IMPORTANCE_HIGH(4)。您为频道指定的重要性级别适用于您发布到其中的所有通知消息。

要支持运行Android 7.1(API级别25)或更低版本的设备,您还必须setPriority() 使用类中的优先级常量调用每个通知NotificationCompat。

important(NotificationManager.IMPORTANCE*)和priority constants(NotificationCompat.PRIORITY*)映射到用户可见的重要性选项,如表1所示

表1.频道重要性级别
【Interface&navigation】创建和管理通知渠道(41)

所有通知(无论重要性)都显示在非中断系统UI位置,例如通知抽屉中和 启动器图标上的徽章,但您可以修改通知徽章的外观。

提交频道后NotificationManager,您无法更改重要性级别。但是,用户可以随时更改应用频道的偏好设置。

有关选择适当优先级的信息,请参阅“ 通知设计指南 ”中的“正确设置和管理通知优先级” 。

阅读通知频道设置


用户可以修改通知通道的设置,包括振动和警报声等行为。因此,如果您想了解用户已应用于通知渠道的设置,请按以下步骤操作:

NotificationChannel通过调用getNotificationChannel()或 获取对象 getNotificationChannels()。
查询特定信道的设置,例如 getVibrationPattern(), getSound(),和 getImportance()。
然后,如果您检测到您认为禁止应用程序的预期行为的频道设置,您可以建议用户更改它并提供操作以打开频道设置(请参阅下一节)。

打开通知通道设置


创建通知通道后,您无法以编程方式更改通知通道的可视和听觉行为 - 只有用户可以从系统设置更改通道行为。要让您的用户轻松访问这些通知设置,您应该在应用的设置界面中添加一个项目,以打开这些系统设置。

您可以Intent使用使用该ACTION_CHANNEL_NOTIFICATION_SETTINGS操作的通知通道打开系统设置 。

例如,以下示例代码显示了如何将用户重定向到通知通道的设置:

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

请注意,intent需要两个额外内容来指定应用程序的包名称(也称为应用程序ID)和要编辑的通道。

删除通知渠道


您可以通过调用删除通知渠道 deleteNotificationChannel()。以下示例代码演示了如何完成此过程:

NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);

注意:通知设置屏幕显示已删除频道的数量,作为垃圾邮件防护机制。您可以通过重新安装应用程序或清除与应用程序副本关联的数据来清除开发设备上的测试通道。

创建通知渠道组


如果您想在设置界面中进一步整理频道的外观,则可以创建频道组。当您的应用支持多个用户帐户(例如工作资料)时,这是一个好主意,因此您可以为每个帐户创建一个通知渠道组。这样,用户可以轻松识别和控制具有相同名称的多个通知通道。
【Interface&navigation】创建和管理通知渠道(41)
图2.包含个人和工作帐户组的通知通道设置

例如,社交网络应用可能包括对个人和工作帐户的支持。在这种情况下,每个帐户可能需要具有相同功能和名称的多个通知通道,例如:

有两个渠道的个人帐户:
新评论
发布建议
有两个渠道的企业帐户:
新评论
发布建议
将通知渠道组织到每个帐户的组中可确保用户可以轻松区分它们。

每个通知渠道组都需要一个在您的包中必须唯一的ID,以及一个用户可见的名称。以下代码段演示了如何创建通知通道组。

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager mNotificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group_id, group_name));

创建新组后,可以调用 setGroup()以将新NotificationChannel对象与组关联 。

将通道提交给通知管理器后,您无法更改通知通道和组之间的关联。

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Interface&navigation】创建和管理通知渠道(41)

转载于:https://blog.51cto.com/4789781/2156672

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值