通知是指 Android 在应用界面之外显示的消息,旨在向用户提供提醒、来自他人的通信或应用中的其他实时信息。用户可以点按通知以打开您的应用,或直接从通知中执行操作。
本页将概要介绍通知的显示位置及可用功能。如需开始构建通知,请参阅创建通知。
如需详细了解通知设计和交互模式,请参阅通知设计指南。
在设备上的外观
通知会自动以不同格式展示给不同地理位置的用户。 通知在状态栏中显示为图标,在抽屉式通知栏中显示更详细的条目,并在应用图标上显示一个标志。通知还会显示在配对的穿戴式设备上。
状态栏和抽屉式通知栏
发出通知后,通知先以图标的形式在状态栏中显示。
图 1. 通知图标显示在状态栏的左侧。
用户可以在状态栏向下滑动以打开抽屉式通知栏,并在其中查看更多详情及对通知执行操作。
图 2. 抽屉式通知栏中的通知。
用户可以向下拖动抽屉式通知栏中的某条通知以查看展开后的视图,其中会显示更多内容以及操作按钮(如果有)。从 Android 13 开始,此展开的视图包含一个按钮,可让用户停止具有持续前台服务的应用。
在应用或用户关闭通知之前,通知会一直显示在抽屉式通知栏中。
提醒式通知
从 Android 5.0 开始,通知可以短暂地显示在浮动窗口中,称之为提醒式通知。此行为通常适用于用户需要立即了解的重要通知,并且仅在设备未锁定时才会出现。
图 3. 前台应用前方显示浮动通知。
当应用发出通知时,系统会显示浮动通知。它稍后就会消失,但仍照常显示在抽屉式通知栏中。
可能触发浮动通知的条件包括:
用户的 activity 处于全屏模式,如当应用使用
fullScreenIntent
时。通知具有高优先级,并在搭载 Android 7.1(API 级别 25)及更低版本的设备上使用铃声或振动。
锁定屏幕
从 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)开始,用户可以启用勿扰模式,以关闭所有通知的声音和振动。除非用户另行指定,否则通知仍会照常显示在系统界面中。
“勿扰”模式分为三个级别:
- 完全静音:阻止所有提示音和振动(包括闹钟、音乐、视频和游戏)。
- 仅限闹钟:阻止所有提示音和振动,闹钟除外。
- 仅限优先事项:用户可以配置哪些系统级类别可以打扰他们,例如仅限闹钟、提醒、活动、来电或消息等。对于消息和通话,用户可以按发送者或来电者进行过滤,如图 13 所示。
图 13. 用户可以根据系统级类别(左)和发送者/来电者(右)允许显示通知。
在 Android 8.0(API 级别 26)及更高版本中,用户还可以按渠道替换“勿扰”模式,从而允许应用特定类别(也称为渠道)显示通知。例如,付款应用可能有与取款和存款相关的通知渠道。在优先模式下,用户可以允许显示取款通知和/或存款通知。
在搭载 Android 7.1(API 级别 25)及更低版本的设备上,用户可以按应用(而不是按渠道)允许显示通知。
如需为这些用户设置配置通知,您必须设置一个系统级类别。
前台服务的通知
如果您的应用正在运行前台服务(一种在后台运行且生命周期长且用户可察觉到的 Service
,如媒体播放器),则需要发出通知。此通知不能像关闭其他通知一样关闭。如需移除通知,必须停止运行服务或从前台状态中移除服务。
如需了解详情,请参阅前台服务。如果您要构建媒体播放器,另请参阅对前台服务使用 MediaStyle 通知。
帖子限制
从 Android 8.1(API 级别 27)开始,应用每秒最多只能发出一次通知提示音。如果应用在一秒内发出了多条通知,这些通知都会按预期显示,但是每秒中只有第一条通知发出提示音。
不过,Android 还对通知更新频率设定了限制。如果您过于频繁地针对单个通知发布更新(例如,不到 1 秒发布多个更新),系统可能会放弃更新。
通知的兼容性
Android 通知系统界面和与通知相关的 API 会不断发展变化。如需在支持旧版设备的同时使用最新的通知 API 功能,请使用支持库通知 API、NotificationCompat
及其子类,以及 NotificationManagerCompat
。这样一来,您就可以避免编写条件代码来检查 API 级别,因为这些 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 5.0(API 级别 21)中引入的 Android Wear(现称为 Wear OS)通知堆栈相同的 API。
允许用户使用内嵌回复功能在通知内回复。用户可以输入文本,系统会将文本路由到通知的父应用。
Android 8.0,API 级别 26
将个别通知放入特定渠道。
允许用户按渠道关闭通知,而不是关闭来自某个应用的所有通知。
让具有有效通知的应用在主屏幕或启动器屏幕上的应用图标顶部显示通知标志。
允许用户从抽屉式导航栏中暂停通知。您可以设置通知的自动超时时间
让您能够设置通知的背景颜色。
将与通知行为相关的一些 API 从
Notification
移到了NotificationChannel
。例如,对于 Android 8.0 及更高版本,请使用NotificationChannel.setImportance()
,而不是NotificationCompat.Builder.setPriority()
。
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) 和企业支持软件包。这也不适用于手机处于锁定状态或用户选择全部清除的情况。