通知是指 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 开始,用户可以选择停用或启用各个通知渠道的锁定屏幕通知。
图 4. 锁定屏幕上已隐藏敏感内容的通知。
如需了解详情,请参阅设置锁定屏幕的可见性。
应用图标的标志
在所支持的设备(搭载 Android 8.0(API 级别 26)及更高版本)启动器中,应用图标通过在相应的应用启动器图标上显示彩色标志(又称通知圆点)来表示有新通知。
用户可以触摸并按住应用图标来查看该应用的通知。然后,用户可以从该菜单中关闭通知或者对通知执行操作(与抽屉式通知栏类似)。
图 5. 通知标记和轻触并按住菜单。
如需详细了解徽章的运作方式,请参阅修改通知徽章。
Wear OS 设备
如果用户有配对的 Wear OS 设备,那么您的所有通知都会自动显示在已配对设备上,包括展开式详情和操作按钮。
您可以通过自定义通知在穿戴式设备上的外观以及提供不同的操作选项(包括建议的回复和语音输入回复)来提升用户体验。如需了解详情,请参阅如何向通知中添加特定于穿戴式设备的功能。
图 6. 通知会自动显示在已配对的 Wear OS 设备上。
通知剖析
通知的设计由系统模板决定,您的应用只需要定义模板中各个部分的内容即可。通知的部分详情仅在展开后的视图中显示。
图 7. 包含基本详情的通知。
图 7 展示了通知最常见的部分,具体如下所示:
- 小图标:必须提供,通过
setSmallIcon()
进行设置。 - 应用名称:由系统提供。
- 时间戳:由系统提供,但您可以使用
setWhen()
替换它或者使用setShowWhen(false)
隐藏它。 - 大图标:可选;通常仅用于联系人照片。
请勿将其用于应用图标。使用
setLargeIcon()
设置。 - 标题:可选;使用
setContentTitle()
进行设置。 - 文本:可选;使用
setContentText()
进行设置。
我们强烈建议您使用系统模板,以确保设计能够很好地兼容所有设备。如有必要,您可以创建自定义通知布局。
如需详细了解如何创建包含上述功能及其他功能的通知,请参阅创建通知。
通知操作
尽管并非强制要求,但最佳实践是每个通知都应在被点按时打开相应的应用 activity。除了这种默认的通知操作之外,您还可以添加可在通知中完成与应用相关任务的操作按钮(通常不需要打开 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 8.0 及更高版本的设备上,渠道还可用于指定通知的重要程度等级,因此发布到同一通知渠道的所有通知的行为都相同。以下部分对此进行了说明。
如需了解详情,请参阅创建和管理通知渠道。
通知的重要程度
Android 利用通知的重要程度来决定通知应在多大程度上干扰用户(视觉上和听觉上)。通知的重要程度越高,干扰程度就越高。
在 Android 7.1(API 级别 25)及更低版本中,通知的重要程度由通知的 priority
决定。
在搭载 Android 8.0(API 级别 26)及更高版本的设备上,通知的重要程度由通知发布到的渠道的 importance
决定。用户可以在系统设置中更改通知渠道的重要程度,如图 12 所示。
图 12. 在搭载 Android 8.0 及更高版本的设备上,用户可以更改每个渠道的重要程度。
可能的重要程度等级和关联的通知行为如下所示:
紧急:发出提示音,并以提醒式通知的形式显示。
高:发出提示音。
中:不发出提示音。
低:不发出提示音,且不会在状态栏中显示。
无论重要性级别如何,所有通知都会在非干扰系统界面位置显示,例如,显示在抽屉式通知栏中,以及在启动器图标上作为标志显示。不过,您可以修改通知标记的外观。
如需了解详情,请参阅如何设置重要程度。
勿扰模式
从 Android 5.0(API 级别 21)开始,用户可以启用勿扰模式,以关闭所有通知的提示音和振动。通知仍会在系统界面中照常显示,除非用户另有指定。
勿扰模式包含 3 种不同的级别:
- 完全静音:阻止所有提示音和振动(包括闹钟、音乐、视频和游戏)。
- 仅限闹钟:阻止所有提示音和振动,闹钟除外。
- 仅限优先事项:用户可以配置哪些系统级类别可以打扰他们,例如仅限闹钟、提醒、活动、来电或短信等。 对于短信和来电,用户可以根据发送者或来电者进行过滤,如图 13 所示。
图 13. 用户可以根据系统级类别(左侧)和发件人或来电者(右侧)允许显示通知。
在搭载 Android 8.0(API 级别 26)及更高版本的设备上,用户还可以通过按渠道替换勿扰模式来允许特定于应用的类别(又称渠道)显示通知。例如,支付类应用可能会有与取款和存款相关的通知渠道。用户可以选择允许在优先模式下显示取款通知和/或存款通知。
在搭载 Android 7.1(API 级别 25)及更低版本的设备上,用户可以按应用(而不是按渠道)允许显示通知。
如需针对上述用户设置配置通知,您必须设置系统级类别。
前台服务的通知
如果您的应用正在运行前台服务(一种长时间在后台运行且用户可察觉到的 Service
,如媒体播放器),则需要发出通知。不能像关闭其他通知那样关闭这种通知。如需移除此类通知,必须停止运行服务或者将其从前台状态中移除。
如需了解详情,请参阅前台服务。如果您要构建媒体播放器,另请参阅在后台播放媒体。
通知行为
Android 16.0,API 级别 36
现在,系统会自动代表应用对通知进行分组。
以下通知会自动分组:
- 不含摘要的通知
- 不包含儿童通知的通知
- 包含单个或少量子通知的通知
Android 15.0,API 级别 35
通知音量渐降
Android 15 引入了一项通知冷却功能,旨在改善快速连续到达的通知的体验。此功能可将重复通知的显示效果、音量和振动强度降低最多两分钟。
需要通过音频和触感反馈来引起注意的严重通知不受冷却时间限制。用户可以在“设置”中关闭通知冷却时间。
图 9. 通知音量渐降设置。
以下示例展示了如何找到通知冷却时间设置:
Kotlin
val intent = Intent(Settings.ACTION_MANAGE_ADAPTIVE_NOTIFICATIONS) val pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
Java
Intent intent = new Intent(Settings.ACTION_MANAGE_ADAPTIVE_NOTIFICATIONS) PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)