手表上的通知所使用的 API 和采用的结构与手机上的通知相同。
通知可以通过两种方式显示于手表上:
- 由移动应用创建通知,系统会将通知自动桥接到手表。
- 由穿戴式应用创建通知。
在这两种情况下,都需要使用
NotificationCompat.Builder
类来创建通知。当您使用 builder 类构建通知时,系统负责正确显示通知。例如,当您从
移动应用发出通知时,每条通知都会显示为通知流中的一张卡片。
请查看以下示例,了解通知的显示方式。
为获得最佳效果,请使用某个
NotificationCompat.Style
子类。
注意
:使用 RemoteViews
会去除自定义布局的通知,并且穿戴式设备只会显示文本和图标。
注意
:Wear OS 不支持全屏 intent 通知 (setFullScreenIntent())
和 USE_FULL_SCREEN_INTENT
权限。
建议在穿戴式设备上使用的通知
对于所有通知,都可以首先考虑使用展开式通知,因为此类通知是吸引穿戴式设备用户注意的理想方式。此类通知会以收起状态显示在通知栏中,以便一目了然地显示简短信息。如果用户点按通知,通知便会展开, 显示更多可滚动浏览的内容和相关操作,提供沉浸式体验。
您可以使用 创建展开式通知
按照与在移动设备上相同的方式,使用任何 NotificationCompat.Style
子类。例如,使用
NotificationCompat.MessagingStyle
的标准通知如下所示:
MessagingStyle 通知示例。
您可以看到,在展开状态下,通知底部堆叠排列了多项 操作。
提示:如果通知包含“回复”操作,例如即时通讯
应用的通知,您可以增强通知的这一行为。例如,您可以启用直接从穿戴式设备进行语音输入
回复的功能,或者启用通过
setChoices() 预定义的文本回复。
如需了解详情,请阅读
添加回复按钮。
避免显示重复的通知
默认情况下,通知会从配对手机应用桥接到配对手表。如果您没有安装穿戴式应用,这是一个不错的选择。
不过,如果您构建了独立手表应用和配对手机应用,这些应用会创建重复的通知。
Wear OS 提供了一种使用桥接 API 停止显示重复通知的方式。对于在搭载 Wear OS 5 或更高版本的设备上运行的应用,这一点尤为重要,因为在移动设备上可以关闭的某些 通知在 Wear OS 设备上无法关闭。 如需了解详情,请参阅 通知的桥接选项。
向通知中添加穿戴式设备专属功能
如果您需要向通知中添加穿戴式设备专属功能,可以使用
NotificationCompat.WearableExtender 类来指定选项。
如要使用此 API,请执行以下操作:
注意:
如果您使用框架的 NotificationManager,
NotificationCompat.WearableExtender 的某些功能将不起作用,因此请务必使用
NotificationCompat。
此示例展示了如何在通知中设置 Wear 专属操作,以及如何设置
关闭 ID。相应通知关闭后,手表和配对手机上具有相同
关闭 ID 的所有其他通知也会关闭。如需检索关闭 ID,
请使用
getDismissalId()。
// This intent will be fired as a result of the user clicking the "Open on watch" action. // However, it executes on the phone, not on the watch. Typically, the Activity should then use // RemoteActivityHelper to then launch the correct activity on the watch. val intent = Intent(context, LaunchOnWearActivity::class.java) val wearPendingIntent = PendingIntent.getActivity( context, wearRequestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) val openOnWatchAction = NotificationCompat.Action.Builder( R.drawable.watch, "Open on watch", wearPendingIntent ) .build() val wearableExtender = NotificationCompat.WearableExtender() // This action will only be shown on the watch, not on the phone. // Actions added to the Notification builder directly will not be shown on the watch, // because one or more actions are defined in the WearableExtender. .addAction(openOnWatchAction) // This synchronizes dismissals between watch and phone. .setDismissalId(chatId) val notification = NotificationCompat.Builder(context, channelId) // ... set other fields ... .extend(wearableExtender) .build()
从穿戴式设备启动手机应用
如果您使用的是桥接通知,任何通知都会自动包含一个用于在手机上启动应用的按钮。 不过,如果您使用的是在手表上创建的本地通知,请使用 以下步骤创建一个用于在手机上启动应用的按钮:
- 创建一个新的
Activity,该 扩展了ConfirmationActivity。 - 在新
Activity中使用RemoteActivityHelper启动手机应用。 - 在构建用于从通知启动
Activity的Intent时,将EXTRA_ANIMATION_TYPEextra 设置为OPEN_ON_PHONE_ANIMATION。
此方法可引导用户在手机上进行互动,并遵循启动后台进程的 平台要求。
注意 :您不能将 BroadcastReceiver 用作通知操作的目标。