通知的桥接选项

默认情况下,系统会从手机应用向 任何配对手表 桥接(共享)通知。如果您构建的手表应用也同时存在于配对手机上,用户可能会收到重复的通知:一个由电话应用生成和桥接,另一个由手表应用生成。您可以利用 Wear OS 提供的功能来控制桥接通知的方式和时间。

避免显示重复的通知

如果您使用外部来源(例如 Firebase Cloud Messaging)来创建通知,您的手机应用和手表应用就可能会各自在手表上显示自己的 通知。若要避免重复通知,请在手表应用中以程序化方式停用桥接功能。

使用桥接标记

若要在手表应用安装后,将手机应用中创建的部分通知桥接到手表,请设置桥接标记。

如需在通知中设置桥接标记,请使用 setBridgeTag(String) 方法,如以下代码示例所示:

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setBridgeTag("tagOne")
    )
    .build()

停用桥接功能

您可以为某些通知或所有通知停用桥接功能。建议您有选择地停用桥接功能。

仅为某些通知停用桥接功能

您可以动态停用桥接功能,并视需要根据通知的标记允许显示某些通知。例如,如需停用除了标记 tagOnetagTwotagThree 之外所有 通知的桥接功能,请使用 BridgingConfig 对象,如以下示例所示:

// In this example, bridging is only enabled for tagOne, tagTwo and tagThree.
BridgingManager.fromContext(context).setConfig(
    BridgingConfig.Builder(context, isBridgingEnabled = false)
        .addExcludedTags(listOf("tagOne", "tagTwo", "tagThree"))
        .build()
)

为所有通知停用桥接功能(不推荐)

为了避免桥接来自手机应用的所有通知,请在手表应用的清单文件中使用 <meta-data> 条目,如以下 示例所示:

<!-- Beware, this can have unintended consequences before the user is signed-in -->
<meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />

设置关闭 ID 以同步类似通知

如果您使用桥接模式功能阻止桥接功能,通知关闭行为就不会在用户的各设备间同步。

不过,如果在手机和手表上都创建了类似的通知,则建议您在用户关闭其中任一设备上的通知后,让系统同时关闭两边的通知。

NotificationCompat.WearableExtender中,您可以设置全局唯一 ID,以便在用户关闭其中一条通知后, 配对手表上具有相同 ID 的其他通知也会关闭。

NotificationCompat.WearableExtender 类提供了一些方法,可让您使用关闭 ID,如以下示例所示:

用户关闭相应通知后,手表和手机上具有相同关闭 ID 的所有其他通知也会关闭。如需检索关闭 ID,请使用 getDismissalId()

在以下示例中,由于为新通知指定了全局唯一 ID,因此关闭行为会进行同步:

val notification = NotificationCompat.Builder(context, channelId)
    // ... set other fields ...
    .extend(
        NotificationCompat.WearableExtender()
            .setDismissalId("abc123")
    )
    .build()

仅限本地的通知

为避免收到重复通知,您还可以使用 setLocalOnly() 将通知设置为仅限本地。

不过,只有当通知必须 显示在创建它的设备上时,才应使用此方法。这不仅包括 Wear OS 设备,还包括其他穿戴式设备和任何其他连接的设备。即使您的应用未安装在手表上,仅限本地的通知也不会桥接。

在构建会创建通知的 Wear OS 和手机应用时,请勿使用此方法来避免重复通知。请改用桥接选项。

例如,当用户在手机上下载文件且通知表明下载已完成时,请使用仅限本地的通知。

不桥接通知的情况

系统不会桥接以下类型的通知:

桥接通知的实现注意事项

从穿戴式设备推送或移除桥接通知需要花费一定时间。在设计通知时,请避免由这一延迟造成的意外行为。以下准则有助于确保桥接通知能与异步通知一起使用:

  • 如果您取消了手机上的某条通知,手表上的对应通知可能需要过一段时间才会取消。在此期间,用户可能会发送该通知上的某个待处理 intent。因此,请继续在应用中接收其已取消的通知的待处理 intent:取消通知时,请保证这些通知的待处理 intent 接收器有效。
  • 请勿一次取消并重新触发堆叠的所有通知。 只修改或移除已实际发生修改的通知。 这样可以避免在更新穿戴式设备时出现延迟,并降低应用对电池续航时间的影响。

设计考虑事项

Wear OS 通知有自己的设计准则。如需了解详情, 请参阅 Wear OS 设计指南