实时动态会提供重要更新的摘要,以便用户无需打开应用即可跟踪进度。系统会提升实时动态通知的优先级,但用户可以暂时关闭实时动态通知或将其降级为标准通知。提升后的通知会在系统界面中更显眼地显示,包括在通知抽屉式导航栏和锁屏顶部,以及作为状态栏中的条状标签。实时动态通知应遵循通知原则,提供简明、及时且相关的信息。
宣传通知卡片具有以下外观特征:
- 默认展开
- 不可收起
您的通知必须满足以下要求,才能作为实时动态:
- 必须为标准样式、
BigTextStyle、CallStyle、ProgressStyle或MetricStyle。 - 必须在 Android 清单
android.permission.POST_PROMOTED_NOTIFICATIONS中请求以下非运行时权限。 - 必须使用
EXTRA_REQUEST_PROMOTED_ONGOING或NotificationCompat.Builder#setRequestPromotedOngoing请求升级。 - 必须为
ongoing(设置FLAG_ONGOING_EVENT)。 - 必须设置
contentTitle。 - 不得设置任何
customContentView(无RemoteViews)。 - 不得是使用
setGroupSummary的群组的摘要。 - 不得
setColorized到TRUE。 - 通知渠道不得具有
IMPORTANCE_MIN。
促销活动特征
以下 API 可帮助您确定系统是否会提升通知:
Notification.FLAG_PROMOTED_ONGOING表示通知是否已升级。Notification.hasPromotableCharacteristics()会验证系统是否可以提升通知。此方法不会考虑用户是否在设置中停用了应用的实时动态。NotificationManager.canPostPromotedNotifications()会检查您的应用是否可以发布广告通知,例如,用户是否在设置中启用了该功能。Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS是 intent 操作,可让应用将用户转到“设置”以启用此功能。
使用条件
对于正在进行、由用户发起且具有时效性的活动,请使用实时动态。
正在进行
实时动态必须代表正在进行的活动,并且有明确的开始和结束时间。如果活动发生在过去,请勿使用实时动态。请改用标准通知。对于尚未开始的活动也是如此,不过即将开始的活动可以使用实时动态。
实时动态代表持续性活动。请勿使用实时动态功能提供对应用功能的加速访问。如果您想这样做,请使用应用 widget 或自定义“快捷设置”功能块。
- 适当用途:活跃导航、正在进行的通话、活跃拼车跟踪和活跃送餐跟踪。
- 不当用途:广告、宣传内容、聊天消息、提醒、即将发生的日历活动,以及快速访问应用功能。
用户自行播放
大多数实时动态应代表由用户明确触发的活动,例如开始锻炼、启动驾车导航或叫拼车。请勿在实时动态中显示环境信息,例如与用户环境、兴趣或即将发生的事件相关的信息。不允许由其他方触发的活动生成实时动态。
有时,用户可能会执行一项操作,该操作会在未来的某个时间启动一个 activity。例如,如果用户购买了航班或音乐会门票、报名参加了锦标赛,或以其他方式表明他们未来会参加某个具有时效性的活动。在这些情况下,在预定活动开始时自动显示实时动态可能比较合适。不过,应用必须调整其触发器,使其仅在活动即将开始时显示。如果用户明确表示希望开始监控后台事件(例如体育赛事),您可以开始发布该事件的实时动态。不过,您还应在关联的通知中添加取消固定操作。
具有时效性
仅当实时动态需要在整个活动期间引起用户注意时,才显示实时动态。实时动态的一个关键用例是监控,用户只需看一眼实时动态,即可密切关注活动的进展情况,从而获得极大便利。
实时动态通常适用于在实时动态和普通通知之间转换的活动。例如,在用户航班起飞前数小时显示登机牌通知是合适的,但只有在用户有迫切需求时(例如,当他们到达机场或场地时,或者登机开始后),该通知才应变为实时动态。相比之下,实时动态不适合用于跟踪包裹,因为用户不需要持续监控包裹。
用户体验实践
使用跟踪器图标直观呈现状态。此设置可以动态更新。
当 ETA 正在计算或尚不可用时,请勿显示空状态。 提供动态占位文本(例如“正在思考…”或“正在重新规划路线…”)来指示系统正在运行,如示例所示。
状态条状标签
状态条状标签可让用户在看不到通知时也能跟踪实时动态。使用 setShortCriticalText 或 setWhen 传达有关以进度为中心的通知的重要状态信息。
Notification.Builder#setSmallIcon。
Notification.Builder#setShortCriticalText 可显示绝对时间。
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,请参阅示例应用。
常见问题解答
问题:进度条末尾的白点是什么?
答案:进度条末尾的白点直观地标记了进度条的末尾。
问题:为什么实时动态不支持自定义通知?
回答:自定义通知的行为在不同的 Android 版本和设备制造商之间存在显著差异,因此难以进行一致的测试和提供一致的用户体验。避免使用 RemoteViews 自定义通知。