通知概览

通知是 Android 在应用界面之外显示的消息, 向用户提供提醒、来自他人的通信信息或其他 适时获取信息用户点按通知即可打开 应用或直接在通知中执行操作。

本页将概要介绍通知的显示位置及可用功能。要开始创建通知,请阅读创建 通知

有关通知设计和互动模式的详情,请参阅 通知设计 指南

在设备上的外观

通知会自动向不同位置以不同格式的用户显示。 通知以图标的形式显示在状态栏中, 抽屉式通知栏,以及应用图标上的标志。其他通知 在配对的穿戴式设备上显示。

状态栏和抽屉式通知栏

发出通知后,通知先以图标的形式在状态栏中显示。

图 1. 通知图标显示在状态的左侧 栏。

用户可以在状态栏向下滑动以打开抽屉式通知栏, 他们可以查看更多详细信息,并根据通知执行操作。

图 2. 抽屉式通知栏中的通知。

用户可以向下拖动抽屉式通知栏中的某条通知以查看展开后的视图,其中会显示更多内容以及操作按钮(如果有)。距离开始还有 Android 13,此展开视图包含一个按钮,让用户能够 停止具有当前前台运行状态的应用 服务

通知会在抽屉式通知栏中保持可见状态,直到它被关闭 由应用或用户发出

提醒式通知

从 Android 5.0 开始,通知可以短暂地以悬浮 窗口(称为浮动通知)。这种行为通常适用于 用户需要立即了解的通知,并且这些通知 。

图 3. 系统会在 。

浮动通知会在您的应用发出通知时显示。它 会在不久后消失,但仍会在抽屉式通知栏中显示,

可能会触发浮动通知的条件包括:

  • 用户的 Activity 处于全屏模式,例如当应用使用 fullScreenIntent

  • 通知具有较高的优先级,并且会在开启时采用铃声或振动 搭载 Android 7.1(API 级别 25)及更低版本的设备。

  • 通知渠道在设备上的重要程度很高 搭载 Android 8.0(API 级别 26)及更高版本。

锁定屏幕

从 Android 5.0 开始,通知可以显示在锁定屏幕上。

您可以通过编程方式设置您的应用发布的通知是否在 安全锁定屏幕,若适用,还会显示其详细程度。

用户可以使用系统设置来选择锁定时显示的信息详细程度 屏幕通知或停用所有锁定屏幕通知。起始内容 Android 8.0,则用户可以在 Android 8.0 中停用或启用锁定屏幕通知, 通知渠道。

图 4. 锁定屏幕上包含敏感内容的通知 已隐藏。

如需了解详情,请参阅设置锁定屏幕 可见性

应用图标的标志

在搭载 Android 8.0(API 级别 26)及更高版本的设备上受支持的启动器中, 应用图标使用称为 通知圆点

用户可以触摸和按住应用程序图标以查看该应用程序的通知。用户 可以通过该菜单关闭通知或对通知执行操作(与通知类似) 抽屉式导航栏。

图 5. 通知标志以及触控和按住菜单。

要详细了解标记的工作原理,请阅读修改通知 徽章

Wear OS 设备

如果用户有配对的 Wear OS 设备,则您的所有通知都会显示在该设备上 包括可展开的详细信息和操作按钮。

您可以自定义 和通过提供不同的操作来实现,包括 建议的回复和语音输入回复。有关详情,请参阅如何将 穿戴式设备特有的功能 通知

图 6. 通知会自动显示在已配对的 Wear OS 上 设备。

通知剖析

通知的设计由系统模板决定,您的应用 定义了模板各个部分的内容。关于 通知只会显示在展开视图中。

图 7. 包含基本详情的通知。

图 7 显示了通知最常见的部分,如下所示:

  1. 小图标:必填;使用 setSmallIcon()
  2. 应用名称:由系统提供。
  3. 时间戳:由系统提供,但您也可以使用 setWhen() 或使用 setShowWhen(false)
  4. 大图标:可选;通常仅用于联系人照片。 请勿将其用作应用图标。设置方式 setLargeIcon()
  5. 标题:可选;使用 setContentTitle()
  6. 文字:可选;使用 setContentText()

我们强烈建议使用系统模板,以便在 所有设备。如有需要,您可以创建自定义通知 布局

有关如何创建包含这些功能的通知的详细信息,请参阅 请参阅创建 通知

通知操作

虽然不是必需的,但最好让每个通知都打开 相应的应用活动除了这个默认的 通知操作,您可以添加操作按钮来完成应用相关 任务(通常无需打开 activity),因为 如图 8 所示。

图 8. 包含操作按钮的通知。

从 Android 7.0(API 级别 24)开始,您可以添加要回复的操作 消息或直接在通知中输入其他文字。

从 Android 10(API 级别 29)开始,平台可以自动生成操作按钮,此类按钮包含基于 intent 的建议操作。

有关添加操作按钮的详细说明,请参阅创建 通知

要求解锁设备

用户可能会在设备的锁定屏幕上看到通知操作。如果 通知操作导致应用启动 activity 或发送直接回复, 用户必须先解锁设备,然后应用才能调用该通知操作。

在 Android 12(API 级别 31)及更高版本中,您可以配置通知操作 以便应用必须解锁设备才能调用该操作; 无论该操作启动的是哪个工作流此选项会在 为锁定设备上的通知提供安全保障

要求在应用调用特定通知之前将设备解锁 操作,将 true 传入 setAuthenticationRequired() 创建通知操作时,如以下代码段所示:

Kotlin

val moreSecureNotification = Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build()

Java

Notification moreSecureNotification = new Notification.Action.Builder(...)

    // This notification always requests authentication when invoked
    // from a lock screen.
    .setAuthenticationRequired(true)
    .build();

展开式通知

默认情况下,通知的文字内容会被截断以放在一行。如果 想要更长的通知,可以启用更大的文本区域 (如图 9 所示)。

图 9. 适用于大型广告的可展开通知 文本。

您还可以使用收件箱样式的图片、 聊天对话或媒体播放控件。如需更多信息 请参阅创建展开式通知

通知更新和分组

为了避免在用户进行以下操作时收到过多通知或多余的通知, 如有其他更新,请更新现有的 通知 而不是发出新的验证码或使用收件箱样式的 通知以显示 会话更新。

不过,如果需要发送多个通知,请考虑进行分组 将单独的通知分为一组(适用于 Android 7.0 及更高版本)。

通过通知组,您可以将多个通知折叠为一个帖子, 显示摘要的抽屉式通知栏。用户可以逐步展开 通知组及其中的每个通知以获取更多详细信息,如 图 10.

图 10. 收起和展开的通知组。

要了解如何将通知添加到群组,请参阅创建 通知

通知渠道

从 Android 8.0(API 级别 26)开始,所有通知都必须分配给 否则它们就不会显示这可让用户停用特定通知 而不是停用所有通知。用户可以 通过 Android 系统控制每个频道的视觉和听觉选项 如图 11 所示。用户还可以轻触和按住通知 更改关联渠道的行为。

在搭载 Android 7.1(API 级别 25)及更低版本的设备上,用户可以管理 通知。每个应用实际上只有一个渠道 (Android 7.1 及更低版本)。

图 11. 时钟应用及该应用的某个渠道的通知设置。

应用可以针对应用发出的每种通知类型使用单独的渠道。 应用还可以创建通知渠道来响应 用户。例如,您可以为每个渠道设置单独的通知渠道 用户在即时通讯应用中创建的对话组。

渠道还可用于指定重要性级别 通知,这样所有通知都发布到同一个 都具有相同的行为具体说明如下 部分。

如需了解详情,请参阅创建和管理通知 渠道

通知的重要程度

Android 利用通知的重要程度来决定通知的重要性 通知会直观地和声音打断用户。重要性越高 通知越容易干扰用户,

在 Android 设备上 7.1(API 级别 25)及更低版本,则通知的重要性由 通知的 priority

在 Android 8.0(API 级别 26)及更高版本中,通知的重要性为 取决于 importance 渠道的标识符。用户可以更改 一个通知渠道,如图 12 所示。

图 12. 用户可以在 Android 设备上更改每个渠道的重要程度 8.0 及更高版本。

可能的重要性级别和相关的通知行为如下: 以下:

  • 紧急:发出提示音,并以浮动通知的形式显示。

  • 高:发出提示音。

  • 中:不发出声音。

  • 低:不发出提示音,且不显示在状态栏中。

无论重要程度如何,所有通知都会显示在非干扰系统中 界面位置,例如抽屉式通知栏中以及启动器上的标志 图标。不过,您可以修改通知的外观 徽章

有关详情,请参阅如何设置 重要性

勿扰模式

从 Android 5.0(API 级别 21)开始,用户可以启用勿扰模式、 此设置会关闭所有通知的提示音和振动。通知仍在 会在系统界面中照常显示,除非用户另行指定。

“请勿打扰”模式有三个级别:

  • 完全静音:阻止所有提示音和振动(包括闹钟、音乐、视频和游戏)。
  • 仅限闹钟:阻止所有提示音和振动,闹钟除外。
  • 仅限优先事项:用户可以配置哪些系统级类别可以 打扰他们,例如仅限闹钟、提醒、活动、来电或消息。 对于消息和来电,用户可以根据发送者或来电者进行过滤,如下所示 如图 13 所示。

图 13. 用户可以根据以下条件允许通知: 系统级类别(左)以及发送者或来电者(右)。

在 Android 8.0(API 级别 26)及更高版本中,用户可额外允许 特定类别(也称为 设置,具体方法是逐一覆盖“勿扰”设置。对于 例如,付款应用可能具有 提款和存款。用户可以允许显示取款通知、存款 通知,或者同时启用这两种通知。

在搭载 Android 7.1(API 级别 25)及更低版本的设备上,用户可以允许 而不是在单个应用上 查看这些报告

要为这些用户设置配置通知,您必须设置 系统级 类别

前台服务的通知

如果您的应用在前台运行,则必须发出通知 服务 - Service(在 长期存在且可被用户注意到的背景,例如媒体 。此通知不能像其他通知一样关闭。移除 必须停止服务或从前台移除服务 状态。

如需了解详情,请参阅前台 服务。如果您要构建媒体 另请参阅在后台播放媒体

帖子限制

从 Android 8.1(API 级别 27)开始,应用无法发出通知提示音 超过每秒一次。如果应用在一秒内发出了多条通知,这些通知都会按预期显示,但是每秒中只有第一条通知发出提示音。

不过,Android 还对通知更新频率设定了限制。如果您 过于频繁地发布单个通知的更新,例如, 一秒钟,系统可能会丢弃更新。

通知的兼容性

Android 通知系统界面和与通知相关的 API 持续 不断演变。在支持旧版通知 API 的同时,使用最新的 Notifications API 功能 使用支持库通知 API, NotificationCompat、 及其子类, NotificationManagerCompat。 这样,您就无需编写条件代码来检查 API 级别,因为这些 由 API 负责处理。

NotificationCompat 会随着平台的发展而更新,以纳入最新的 方法。不过,某个方法在 NotificationCompat 中是否可用 保证在旧款设备上提供相应功能。在某些 用例,调用新引入的 API 会导致在旧设备上出现空操作。

下面汇总了各 API 级别最显著的行为变更 Android 通知。

Android 5.0,API 级别 21

  • 引入了锁定屏幕和浮动通知。

  • 允许用户将手机设置为“请勿打扰”模式,并配置 当设备处于开机状态时,允许显示通知打断他们 “仅限优先事项”模式

  • 添加了一些方法,用于设置是否在锁定屏幕上显示通知; 例如 setVisibility()), 以及指定通知文字的“公开”版本。

  • 添加了 setPriority() 方法,用于告知系统 。例如,如果将优先级设为“高”, 通知以浮动通知的形式显示。

  • 向 Android Wear(现已更名为 Wear OS)添加通知堆栈支持 设备。通过以下方式将通知放入堆叠中: setGroup()。 以下设备不支持通知堆栈(之后称为“组”或“包”) Android 7.0(API 级别 24)之前的版本。

Android 7.0,API 级别 24

  • 调整通知模板的样式,以强调主打图片和 头像。

  • 添加了三个通知模板:一个用于即时通讯应用,另外两个 以及如何使用可扩展选项和其他 系统装饰。

  • 添加了对手机和平板电脑等手持设备的支持, 通知组。使用与 Android Wear(现在称为 Wear)相同的 API Android 5.0(API 级别 21)中引入的通知堆栈。

  • 允许用户使用内嵌回复在通知内进行回复。他们可以 文本,然后被路由到通知的父应用。

Android 8.0,API 级别 26

  • 将单个通知置于 channel

  • 允许用户按渠道关闭通知,而非关闭所有通知 通知。

  • 让包含有效通知的应用在顶部显示通知标志 将其应用图标显示在主屏幕或启动器屏幕上。

  • 允许用户延后抽屉式通知栏中的通知。您可以设置自动 超时。

  • 通过该属性,您可以设置通知的背景颜色。

  • 将一些有关通知行为的 API 从 NotificationNotificationChannel。 例如,使用 NotificationChannel.setImportance() 而非 NotificationCompat.Builder.setPriority() (适用于 Android 8.0 及更高版本)。

Android 13.0,API 级别 33

Android 14.0,API 级别 34

  • 将全屏 intent 通知限制为仅提供通话和 闹钟。使用 NotificationManager.canUseFullScreenIntent API 执行以下操作: 检查您的应用是否具有权限。否则,您的应用可以使用 ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT,可启动设置页面 以便用户可以授予权限

  • 通过允许 用户关闭通知操作,即使 已设置 Notification.FLAG_ONGOING_EVENT 标志。这不适用于 如果 Notification.FLAG_ONGOING_EVENT 标志为 CallStyle,则发出通知 设备政策控制器 (DPC) 和支持软件包, 企业。这同样不适用于手机处于锁定状态或 用户选择全部清除