通知是 Android 在应用界面之外显示的消息, 向用户提供提醒、来自他人的通信信息或其他 适时获取信息用户点按通知即可打开 应用或直接在通知中执行操作。
本页将概要介绍通知的显示位置及可用功能。要开始创建通知,请阅读创建 通知。
有关通知设计和互动模式的详情,请参阅 通知设计 指南。
在设备上的外观
通知会自动向不同位置以不同格式的用户显示。 通知以图标的形式显示在状态栏中, 抽屉式通知栏,以及应用图标上的标志。其他通知 在配对的穿戴式设备上显示。
状态栏和抽屉式通知栏
发出通知后,通知先以图标的形式在状态栏中显示。
用户可以在状态栏向下滑动以打开抽屉式通知栏, 他们可以查看更多详细信息,并根据通知执行操作。
用户可以向下拖动抽屉式通知栏中的某条通知以查看展开后的视图,其中会显示更多内容以及操作按钮(如果有)。距离开始还有 Android 13,此展开视图包含一个按钮,让用户能够 停止具有当前前台运行状态的应用 服务。
通知会在抽屉式通知栏中保持可见状态,直到它被关闭 由应用或用户发出
提醒式通知
从 Android 5.0 开始,通知可以短暂地以悬浮 窗口(称为浮动通知)。这种行为通常适用于 用户需要立即了解的通知,并且这些通知 。
浮动通知会在您的应用发出通知时显示。它 会在不久后消失,但仍会在抽屉式通知栏中显示,
可能会触发浮动通知的条件包括:
用户的 Activity 处于全屏模式,例如当应用使用
fullScreenIntent
。通知具有较高的优先级,并且会在开启时采用铃声或振动 搭载 Android 7.1(API 级别 25)及更低版本的设备。
锁定屏幕
从 Android 5.0 开始,通知可以显示在锁定屏幕上。
您可以通过编程方式设置您的应用发布的通知是否在 安全锁定屏幕,若适用,还会显示其详细程度。
用户可以使用系统设置来选择锁定时显示的信息详细程度 屏幕通知或停用所有锁定屏幕通知。起始内容 Android 8.0,则用户可以在 Android 8.0 中停用或启用锁定屏幕通知, 通知渠道。
如需了解详情,请参阅设置锁定屏幕 可见性。
应用图标的标志
在搭载 Android 8.0(API 级别 26)及更高版本的设备上受支持的启动器中, 应用图标使用称为 通知圆点。
用户可以触摸和按住应用程序图标以查看该应用程序的通知。用户 可以通过该菜单关闭通知或对通知执行操作(与通知类似) 抽屉式导航栏。
要详细了解标记的工作原理,请阅读修改通知 徽章。
Wear OS 设备
如果用户有配对的 Wear OS 设备,则您的所有通知都会显示在该设备上 包括可展开的详细信息和操作按钮。
您可以自定义 和通过提供不同的操作来实现,包括 建议的回复和语音输入回复。有关详情,请参阅如何将 穿戴式设备特有的功能 通知。
通知剖析
通知的设计由系统模板决定,您的应用 定义了模板各个部分的内容。关于 通知只会显示在展开视图中。
图 7 显示了通知最常见的部分,如下所示:
- 小图标:必填;使用
setSmallIcon()
。 - 应用名称:由系统提供。
- 时间戳:由系统提供,但您也可以使用
setWhen()
或使用setShowWhen(false)
。 - 大图标:可选;通常仅用于联系人照片。
请勿将其用作应用图标。设置方式
setLargeIcon()
。 - 标题:可选;使用
setContentTitle()
。 - 文字:可选;使用
setContentText()
。
我们强烈建议使用系统模板,以便在 所有设备。如有需要,您可以创建自定义通知 布局。
有关如何创建包含这些功能的通知的详细信息,请参阅 请参阅创建 通知。
通知操作
虽然不是必需的,但最好让每个通知都打开 相应的应用活动除了这个默认的 通知操作,您可以添加操作按钮来完成应用相关 任务(通常无需打开 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 利用通知的重要程度来决定通知的重要性 通知会直观地和声音打断用户。重要性越高 通知越容易干扰用户,
在 Android 设备上
7.1(API 级别 25)及更低版本,则通知的重要性由
通知的
priority
。
在 Android 8.0(API 级别 26)及更高版本中,通知的重要性为
取决于
importance
渠道的标识符。用户可以更改
一个通知渠道,如图 12 所示。
可能的重要性级别和相关的通知行为如下: 以下:
紧急:发出提示音,并以浮动通知的形式显示。
高:发出提示音。
中:不发出声音。
低:不发出提示音,且不显示在状态栏中。
无论重要程度如何,所有通知都会显示在非干扰系统中 界面位置,例如抽屉式通知栏中以及启动器上的标志 图标。不过,您可以修改通知的外观 徽章。
有关详情,请参阅如何设置 重要性。
勿扰模式
从 Android 5.0(API 级别 21)开始,用户可以启用勿扰模式、 此设置会关闭所有通知的提示音和振动。通知仍在 会在系统界面中照常显示,除非用户另行指定。
“请勿打扰”模式有三个级别:
- 完全静音:阻止所有提示音和振动(包括闹钟、音乐、视频和游戏)。
- 仅限闹钟:阻止所有提示音和振动,闹钟除外。
- 仅限优先事项:用户可以配置哪些系统级类别可以 打扰他们,例如仅限闹钟、提醒、活动、来电或消息。 对于消息和来电,用户可以根据发送者或来电者进行过滤,如下所示 如图 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 从
Notification
至NotificationChannel
。 例如,使用NotificationChannel.setImportance()
而非NotificationCompat.Builder.setPriority()
(适用于 Android 8.0 及更高版本)。
Android 13.0,API 级别 33
- 添加了 runtime 权限。针对您的 发送应用 不可豁免 通知,用户必须向您的应用授予此权限。
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) 和支持软件包, 企业。这同样不适用于手机处于锁定状态或 用户选择全部清除。