通知是指 Android 在您应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的通信信息或您应用中的其他实时信息。用户可以点按通知来打开应用,或直接从通知中执行操作。
本页将概要介绍通知的显示位置及可用功能。如需开始构建通知,请参阅创建通知。
如需详细了解通知设计和互动模式,请参阅通知设计指南。
在设备上的外观
通知可以在不同的位置以不同的格式自动显示。通知会以图标的形式显示在状态栏中,以更详细的条目显示在抽屉式通知栏中,并以标记的形式显示在应用图标上。通知也会显示在已配对的穿戴式设备上。
状态栏和抽屉式通知栏
发出通知后,通知先以图标的形式在状态栏中显示。
用户可以在状态栏向下滑动以打开抽屉式通知栏,并在其中查看更多详情及对通知执行操作。
用户可以向下拖动抽屉式通知栏中的某条通知以查看展开后的视图,其中会显示更多内容以及操作按钮(如果有)。从 Android 13 开始,此展开后的视图会包含一个按钮,可让用户停止具有持续前台服务的应用。
在应用或用户关闭通知之前,通知会一直显示在抽屉式通知栏中。
提醒式通知
从 Android 5.0 开始,通知可以短暂地显示在浮动窗口中,称之为提醒式通知。这种行为通常适用于用户需要立即知晓的重要通知,而且仅在设备未锁定时才显示。
提醒式通知会在应用发出通知后显示。该通知会在片刻后消失,但仍照常显示在抽屉式通知栏中。
可能会触发提醒式通知的条件包括:
用户的 activity 处于全屏模式,例如当应用使用
fullScreenIntent
时。通知的优先级很高,且在搭载 Android 7.1(API 级别 25)及更低版本的设备上使用铃声或振动。
在搭载 Android 8.0(API 级别 26)及更高版本的设备上,通知渠道的重要程度比较高。
锁定屏幕
从 Android 5.0 开始,通知可以显示在锁定屏幕上。
您可以程序化地设置您的应用发布的通知是否显示在安全锁定屏幕上,以及显示详情级别(如果显示)。
用户可以通过系统设置来选择锁定屏幕通知的详情可见等级,或停用所有锁定屏幕通知。从 Android 8.0 开始,用户可以停用或启用各个通知渠道的锁定屏幕通知。
如需了解详情,请参阅设置锁定屏幕的可见性。
应用图标的标志
在搭载 Android 8.0(API 级别 26)及更高版本的设备上支持的启动器中,应用图标通过在相应的应用启动器图标上显示彩色标志(也称为通知圆点)来表示有新通知。
用户可以轻触并按住应用图标来查看该应用的通知。然后,用户可以从该菜单中关闭通知或者对通知执行操作(与抽屉式通知栏类似)。
如需详细了解标志的运作方式,请参阅修改通知标志。
Wear OS 设备
如果用户有配对的 Wear OS 设备,那么您的所有通知都会自动显示在已配对设备上,包括展开式详情和操作按钮。
您可以通过自定义通知在穿戴式设备上的外观以及提供不同的操作选项(包括建议的回复和语音输入回复)来提升用户体验。如需了解详情,请参阅如何向通知中添加特定于穿戴式设备的功能。
通知剖析
通知的设计由系统模板决定,您的应用定义模板中各个部分的内容。通知的部分详情仅在展开后的视图中显示。
图 7 展示了通知最常见的部分,具体如下所示:
- 小图标:必需;使用
setSmallIcon()
进行设置。 - 应用名称:由系统提供。
- 时间戳:由系统提供,但您可以使用
setWhen()
替换它或者使用setShowWhen(false)
隐藏它。 - 大图标:可选;通常仅用于联系人照片。
请勿将其用作应用图标。使用
setLargeIcon()
进行设置。 - 标题:可选;使用
setContentTitle()
进行设置。 - 文本:可选;使用
setContentText()
进行设置。
我们强烈建议您使用系统模板,以确保设计能够很好地兼容所有设备。如有必要,您可以创建自定义通知布局。
如需详细了解如何创建包含上述功能及其他功能的通知,请参阅创建通知。
通知操作
虽然并非强制要求,但最好让每个通知在被点按时打开相应的应用 activity。除了这种默认的通知操作之外,您还可以添加可在通知中完成与应用相关任务的操作按钮(通常不需要打开 activity),如图 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 所示。
您还可以使用图片、收件箱样式、聊天对话或媒体播放控件来创建展开式通知。如需了解详情,请参阅创建展开式通知。
通知更新和分组
为了使用户在您提供后续更新时不会遭遇多个通知或多余通知的轰炸,请更新现有通知(而不是发出新通知),或者使用收件箱样式的通知来显示会话更新。
不过,如有必要发出多个通知,请考虑将这些孤立的通知分为一组(可在搭载 Android 7.0 及更高版本的设备上这样做)。
借助通知组,您可以以一条摘要的形式在抽屉式通知栏中将多个通知收拢成一条通知消息。用户可以逐级展开通知组以及其中的每条通知以查看详情,如图 10 所示。
如需了解如何将通知添加到某个组,请参阅创建通知组。
通知渠道
从 Android 8.0(API 级别 26)开始,必须为所有通知分配渠道,否则通知将不会显示。这样,用户就可以停用您应用的特定通知渠道,而不是停用您的所有通知。用户可以通过 Android 系统设置控制每个渠道的视觉和听觉选项,如图 11 所示。用户还可以轻触并按住通知以更改所关联渠道的行为。
在搭载 Android 7.1(API 级别 25)及更低版本的设备上,用户仅可以按应用来管理通知。在 Android 7.1 及更低版本中,每个应用实际上只有一个渠道。
应用可以为其发出的每类通知设置单独的渠道。应用还可以创建通知渠道来响应用户做出的选择。例如,您可以为用户在短信应用中创建的每个会话组设置不同的通知渠道。
在搭载 Android 8.0 及更高版本的设备上,渠道还可用于指定通知的重要程度等级,因此发布到同一通知渠道的所有通知的行为都相同。以下部分介绍了此操作。
如需了解详情,请参阅创建和管理通知渠道。
通知的重要程度
Android 利用通知的重要程度来决定通知应在多大程度上干扰用户(视觉上和听觉上)。通知的重要程度越高,干扰程度就越高。
在搭载 Android 7.1(API 级别 25)及更低版本的设备上,通知的重要程度由通知的 priority
决定。
在搭载 Android 8.0(API 级别 26)及更高版本的设备上,通知的重要程度由通知发布到的渠道的 importance
决定。用户可以在系统设置中更改通知渠道的重要程度,如图 12 所示。
可能的重要程度等级及其相关通知行为如下所示:
紧急:发出提示音,并以提醒式通知的形式显示。
高:发出提示音。
中:无提示音。
低:不发出提示音,且不会在状态栏中显示。
无论重要程度如何,所有通知都会在非干扰系统界面位置显示,例如,显示在抽屉式通知栏中,以及在启动器图标上作为标志显示。不过,您可以修改通知标记的外观。
如需了解详情,请参阅如何设置重要程度。
勿扰模式
从 Android 5.0(API 级别 21)开始,用户可以启用勿扰模式,以关闭所有通知的提示音和振动。通知仍会在系统界面中照常显示,除非用户另有指定。
勿扰模式包含 3 种级别:
- 完全静音:阻止所有提示音和振动(包括闹钟、音乐、视频和游戏)。
- 仅限闹钟:阻止所有提示音和振动,闹钟除外。
- 仅限优先事项:用户可以配置哪些系统级类别可以打扰他们(如仅限闹钟、提醒、活动、来电或短信等)。对于短信和来电,用户可以根据发件人或来电者进行过滤,如图 13 所示。
在搭载 Android 8.0(API 级别 26)及更高版本的设备上,用户还可以通过按渠道替换勿扰模式来允许特定于应用的类别(又称渠道)显示通知。例如,付款类应用可能会有与取款和存款相关的通知渠道。用户可以在优先模式下允许显示取款通知和/或存款通知。
在搭载 Android 7.1(API 级别 25)及更低版本的设备上,用户可以按应用(而不是按渠道)允许显示通知。
如需针对上述用户设置配置通知,您必须设置系统级类别。
前台服务的通知
如果您的应用正在运行前台服务(一种长时间在后台运行且用户可察觉到的 Service
,如媒体播放器),则需要发出通知。不能像关闭其他通知那样关闭这种通知。如需移除此类通知,必须停止运行服务或者将其从前台状态中移除。
如需了解详情,请参阅前台服务。如果您要构建媒体播放器,另请参阅在后台播放媒体内容。
帖子数量限制
从 Android 8.1(API 级别 27)开始,应用每秒最多只能发出一次通知提示音。如果应用在一秒内发出了多条通知,这些通知都会按预期显示,但是每秒中只有第一条通知发出提示音。
不过,Android 还对通知更新频率设定了限制。如果您过于频繁地发布有关某条通知的更新(例如不到一秒内发布多个),系统可能会丢弃更新。
通知的兼容性
Android 通知系统界面以及与通知相关的 API 在不断发展。如需在使用最新通知 API 功能的同时支持旧版设备,请使用支持库通知 API、NotificationCompat
及其子类,以及 NotificationManagerCompat
。这样一来,您就无需编写条件代码来检查 API 级别,因为这些 API 会为您代劳。
NotificationCompat
随着平台的发展不断更新,旨在纳入最新的方法。不过,某个方法在 NotificationCompat
中可用并不能保证可以在旧版设备上提供相应功能。在某些情况下,调用新引入的 API 会导致旧版设备出现空操作。
下面总结了 Android 通知的一些最重要的行为变化(按 API 级别)。
Android 5.0,API 级别 21
引入了锁定屏幕和提醒式通知。
允许用户将手机设为勿扰模式,并配置允许哪些通知在设备处于“仅限优先事项”模式时打扰他们。
添加了用于设置通知是否在锁定屏幕上显示的方法(例如
setVisibility()
),以及指定通知文本的“公开”版本的方法。添加了
setPriority()
方法,用于告知系统通知的干扰程度。例如,将优先级设置为“高”可使通知以提醒式通知的形式显示。向 Android Wear(现已更名为 Wear OS)设备添加了通知堆栈支持。使用
setGroup()
将通知放入堆栈。在 Android 7.0(API 级别 24)之前,平板电脑或手机不支持通知堆栈(后来称为组或 Bundle)。
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
标志或企业设备政策控制器 (DPC) 和支持软件包,则不适用于CallStyle
通知。当手机处于锁定状态或用户选择清除全部时,此规则也不适用。
通知行为
通知音量渐降
Android 15.0,API 级别 35
Android 15 引入了通知冷却功能,旨在改进连续收到通知时的体验。此功能可在最多两分钟内降低重复通知的外观、音量和振动强度。
需要使用音频和触感反馈来吸引注意力的紧急通知不受冷却时间的限制。用户可以在“设置”中关闭通知冷却时间。
以下示例展示了如何找到通知冷却时间设置:
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)