创建实时更新通知

实时动态会提供重要更新的摘要,以便用户无需打开应用即可跟踪进度。系统会提升实时动态通知的优先级,但用户可以暂时关闭实时动态通知或将其降级为标准通知。提升后的通知会在系统界面中更显眼地显示,包括在通知抽屉式导航栏和锁屏顶部,以及作为状态栏中的条状标签。实时动态通知应遵循通知原则,提供简明、及时且相关的信息。

图 1. 实时动态通知示例。

宣传通知卡片具有以下外观特征:

  • 默认展开
  • 不可收起

您的通知必须满足以下要求,才能作为实时动态:

促销活动特征

以下 API 可帮助您确定系统是否会提升通知:

  • Notification.FLAG_PROMOTED_ONGOING 表示通知是否已升级。
  • Notification.hasPromotableCharacteristics() 会验证系统是否可以提升通知。此方法不会考虑用户是否在设置中停用了应用的实时动态。
  • NotificationManager.canPostPromotedNotifications() 会检查您的应用是否可以发布广告通知,例如,用户是否在设置中启用了该功能。
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS 是 intent 操作,可让应用将用户转到“设置”以启用此功能。

使用条件

对于正在进行、由用户发起且具有时效性的活动,请使用实时动态。

图 2. 在主屏幕和锁屏上以条状标签形式显示的实时动态。

正在进行

实时动态必须代表正在进行的活动,并且有明确的开始和结束时间。如果活动发生在过去,请勿使用实时动态。请改用标准通知。对于尚未开始的活动也是如此,不过即将开始的活动可以使用实时动态。

实时动态代表持续性活动。请勿使用实时动态功能提供对应用功能的加速访问。如果您想这样做,请使用应用 widget 或自定义“快捷设置”功能块。

  • 适当用途:活跃导航、正在进行的通话、活跃拼车跟踪和活跃送餐跟踪。
  • 不当用途:广告、宣传内容、聊天消息、提醒、即将发生的日历活动,以及快速访问应用功能。

用户自行播放

大多数实时动态应代表由用户明确触发的活动,例如开始锻炼、启动驾车导航或叫拼车。请勿在实时动态中显示环境信息,例如与用户环境、兴趣或即将发生的事件相关的信息。不允许由其他方触发的活动生成实时动态。

有时,用户可能会执行一项操作,该操作会在未来的某个时间启动一个 activity。例如,如果用户购买了航班或音乐会门票、报名参加了锦标赛,或以其他方式表明他们未来会参加某个具有时效性的活动。在这些情况下,在预定活动开始时自动显示实时动态可能比较合适。不过,应用必须调整其触发器,使其仅在活动即将开始时显示。如果用户明确表示希望开始监控后台事件(例如体育赛事),您可以开始发布该事件的实时动态。不过,您还应在关联的通知中添加取消固定操作。

具有时效性

仅当实时动态需要在整个活动期间引起用户注意时,才显示实时动态。实时动态的一个关键用例是监控,用户只需看一眼实时动态,即可密切关注活动的进展情况,从而获得极大便利。

实时动态通常适用于在实时动态和普通通知之间转换的活动。例如,在用户航班起飞前数小时显示登机牌通知是合适的,但只有在用户有迫切需求时(例如,当他们到达机场或场地时,或者登机开始后),该通知才应变为实时动态。相比之下,实时动态不适合用于跟踪包裹,因为用户不需要持续监控包裹。

用户体验实践

使用跟踪器图标直观呈现状态。此设置可以动态更新。

进度条上的自定义跟踪器
图 3. 自定义追踪器图标。

当 ETA 正在计算或尚不可用时,请勿显示空状态。 提供动态占位文本(例如“正在思考…”或“正在重新规划路线…”)来指示系统正在运行,如示例所示。

非空状态,用于显示思考过程
图 4. 实时动态的非空状态。

状态条状标签

状态条状标签可让用户在看不到通知时也能跟踪实时动态。使用 setShortCriticalText 或 setWhen 传达有关以进度为中心的通知的重要状态信息。

带图标的状态条状标签
图 5. 不确定状态会显示小图标 Notification.Builder#setSmallIcon。
带有时间的状态条状标签
图 6. 使用 Notification.Builder#setShortCriticalText 可显示绝对时间。
包含信息的状态条状标签
图 7. 使用 Notification.Builder#setShortCriticalText 传达重要信息。

时间

when 时间会触发通知有效期的倒计时,除非通知被关闭或更新。以下项目符号列表说明了在各种情况下时间的工作原理:

  • when 时间至少比当前时间晚 2 分钟:如果当前时间是上午 10:05,而 when 时间设置为上午 10:10,则条状标签会显示 5min。
  • when 时间已过:不显示文本。
  • 使用 Chronometer 计时时,可在条状标签中显示计时器。请参阅 setUsesChronometer 和 setChronometerCountdown。只要计时器时间为正数,计时器就会显示在条状标签中。
  • 您不希望在通知中显示时间:使用 setShowWhen 将其设置为 FALSE。

状态条状标签外观

状态条状标签始终包含图标,并可选择包含文本。条状标签的最大宽度为 96dp。只有当整个文本可以容纳在条状标签中时,文本才会显示。系统会根据以下条件显示文本:

  • 如果少于 7 个字符,则显示完整文本。
  • 如果显示的文字少于一半,则仅显示图标。
  • 如果可以显示一半以上的文字,请尽可能多地显示文字。

Wear OS

实时动态会桥接到部分已连接的 Wear OS 设备。如需了解此桥接行为,以及如何为 Wear OS 创建本地实时动态,请参阅 Wear OS 实时动态指南。

关闭

用户可以在通知栏中控制通知的显示情况。发布不必要的实时动态可能会导致用户撤消应用的发布权限。

为防止用户完全停用实时动态,请避免发布用户可能会关闭的动态。请勿重新发布用户已关闭的实时动态。使用 setDeleteIntent 检测已关闭的更新。

如需试用这些 API,请参阅示例应用。

常见问题解答

问题:进度条末尾的白点是什么?

进度无障碍可视化指示器结束
图 8. 旅程结束时的无障碍可视化

答案:进度条末尾的白点直观地标记了进度条的末尾。

问题:为什么实时动态不支持自定义通知?

回答:自定义通知的行为在不同的 Android 版本和设备制造商之间存在显著差异,因此难以进行一致的测试和提供一致的用户体验。避免使用 RemoteViews 自定义通知。