创建实时更新通知

系统会推送实时更新通知。推介通知会在系统界面上更醒目地显示,包括在通知抽屉和锁屏顶部,以及在状态栏中以条状标签的形式显示。

图 1. 实时更新通知示例。

推介通知卡具有以下外观特征:

  • 默认展开
  • 不可折叠

您的通知必须满足以下要求,才能被视为实时更新:

  • 必须为“标准/无样式”“BigTextStyle”“CallStyle”或“ProgressStyle”。
  • 必须在 Android 清单 android.permission.POST_PROMOTED_NOTIFICATIONS 中请求以下非运行时权限。
  • 必须使用 EXTRA_REQUEST_PROMOTED_ONGOINGNotificationCompat.Builder#requestPromotedOngoing 请求促销。
  • 必须为 ongoing(设置 FLAG_ONGOING_EVENT)。
  • 必须设置 contentTitle
  • 不得设置任何 customContentView(无 RemoteViews)。
  • 不得是使用 setGroupSummary 的组的摘要。
  • 通知渠道不得包含 IMPORTANCE_MIN

促销活动特征

以下 API 可帮助您确定系统是否会推介您的通知:

  • Notification.FLAG_PROMOTED_ONGOING 表示通知是否已提升。
  • Notification.hasPromotableCharacteristics() 用于验证系统是否可以提升通知的优先级。此方法不会考虑用户是否在设置中为应用停用了实时更新。
  • NotificationManager.canPostPromotedNotifications() 会检查您的应用是否可以发布宣传通知,例如,用户是否已在设置中启用或停用该通知。
  • Settings.ACTION_MANAGE_APP_PROMOTED_NOTIFICATIONS 是一个 intent 操作,可让应用将用户发送到“设置”以启用此功能。

使用条件

针对由用户发起且具有时效性的持续性活动使用实时更新。

正在进行

实时更新必须表示正在进行的活动,并且具有明确的开始和结束时间。如果活动发生在过去,请勿使用实时更新。请改用标准通知。这同样适用于尚未开始的活动,不过即将开始的活动可以使用实时更新。

“实时动态”表示正在进行的活动。请勿使用实时更新来加快应用功能的访问速度。如果您想这样做,请使用应用微件或自定义“快捷设置”功能块。

  • 适当用途:导航、持续通话、持续跟踪共享车辆行程和持续跟踪外卖订单。
  • 不当使用情形:广告、促销活动、聊天消息、提醒、即将到来的日历活动以及快速访问应用功能。

用户自行播放

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

有时,用户可能会执行某项操作,以便在未来某个时间启动 activity。例如,如果用户购买了机票或音乐会票券、报名参加了锦标赛,或者以其他方式表明自己未来会参加某个限时活动。在这些情况下,在安排的活动开始时自动显示实时动态可能很合适。不过,应用必须调整其触发器,以便仅在活动即将开始时显示。如果用户明确表示想要开始监控体育赛事等后台活动,您就可以开始发布该活动的实时动态。不过,您还应在关联的通知中添加取消固定操作。

具有时效性

仅当实时更新需要用户在整个 activity 期间保持注意力时,才显示实时更新。实时更新的一个关键用例是监控,当用户通过查看实时更新来密切关注 activity 的不断变化状态时,可以获得显著的好处。

实时更新通常适用于在实时更新和普通通知之间转换的 activity。例如,在用户的航班起飞前数小时显示登机牌通知是合适的,但只有在用户有紧急需求时(例如,到达机场或场馆或开始登机时),通知才应变为实时更新。与之相反,实时更新不适合跟踪软件包,因为用户无需持续监控此类更新。

状态条状标签

借助状态条状标签,用户可以在不查看通知时跟踪实时动态。使用 setShortCriticalTextsetWhen 传达与以进度为中心的通知相关的重要状态信息。

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

时间

当通知显示时,系统会根据 when 时间触发通知显示时长的倒计时,除非通知被关闭或更新。

  • “何时”时间至少比当前时间晚 2 分钟:如果当前时间是上午 10:05,而“何时”时间设为上午 10:10,则条状标签将显示“5 分钟”。
  • 如果“何时”时间超过过去 1 分钟,系统将不会显示通知。
  • 如果您不希望在通知栏中显示时间,请使用 setShowWhenFALSE 设为 0。

状态条状标签的外观

状态条状标签始终包含图标,还可以包含文本。条状标签的最大宽度为 96dp。根据以下条件显示文本:

  • 如果少于 7 个字符,则显示完整文本。
  • 如果文本显示不到一半,请仅显示图标。
  • 如果超过一半的文字会显示,请尽可能显示尽可能多的文字。

关闭

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

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