Skip to content

Most visited

Recently visited

navigation

通知的桥接模式

默认情况下,通知从配套手机上的应用桥接(共享)至配对手表。如果您构建了独立手表应用,并且还有配套手机应用,这些应用可能会创建重复的通知。Android Wear 提供了处理这个重复通知问题的功能。

:您可以使用 Firebase 云消息传递 (FCM) 向设备发送通知提醒。请参阅通过 Android、iOS 和 Chrome 吸引您的用户

开发者可以通过下列一种或多种方式改变通知的行为:

在 manifest 文件中指定桥接配置

应用的 Android manifest 文件可能指示,不应将来自对应手机应用的通知桥接至手表。具体地讲,要防止桥接来自手机应用的通知,您可以在手表应用(例如独立手表应用)的 manifest 文件中使用 <meta-data> 条目,如下所示:

com.google.android.wearable.notificationBridgeMode

将该 <meta-data> 条目添加为 <application> 元素的子元素。将该条目设置为 NO_BRIDGING 将防止桥接:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

如果您不加入 <meta-data> 条目,或者您指定的值是 BRIDGING 而非 NO_BRIDGING,则会默认发生桥接行为。

在 manifest 中设置的桥接配置会在手表应用安装后立即生效。

在运行时指定桥接配置

您可以使用桥接模式功能在运行时指定桥接配置。具体地讲,就是使用 BridgingManager 类。

您可以使用 BridgingManager 对象设置桥接模式,以及为豁免于桥接模式的通知设置标记(可选步骤)。具体地讲,创建一个 BridgingConfig 对象,并按此部分所示进行设置。

在运行时指定桥接配置会重写 Android manifest 文件中与桥接有关的设置。

停用所有通知的桥接

您可以按如下方式停用所有通知的桥接:

BridgingManager.fromContext(context).setConfig(
  new BridgingConfig.Builder(context, false)
    .build());

如果未设置以上配置,则默认启用桥接模式。

带标记的豁免通知

您可以为所有不带特定标记的通知停用桥接。

例如,您可以为所有不带 foobarbaz 标记的通知停用桥接。

BridgingManager.fromContext(context).setConfig(
  new BridgingConfig.Builder(context, false)
    .addExcludedTags(Arrays.asList("foo", "bar", "baz"))
    .build());

另举一例,您可以将带有特定标记(例如 foobar)的通知排除在外:

BridgingManager.fromContext(context).setConfig(
  new BridgingConfig.Builder(context, false)
    .addExcludedTag("foo")
    .addExcludedTag("bar")
    .build());

设置桥接标记

可按如下方式使用 setBridgeTag(String) 函数在通知上设置桥接标记:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
// ... set other fields ...
  .extend(
    new NotificationCompat.WearableExtender()
      .setBridgeTag("foo"));
  Notification notification = notificationBuilder.build();

防止桥接的现有方法

在现有应用中,您可能已针对收到提醒时手机未连接的情况停用了桥接。在此情况下,在手表应用中关闭通知后,您可能仍需在所有其他设备上关闭通知。

防止桥接的现有方式是使用 Notification.Builder 类;需要在 setLocalOnly 函数中指定 true

不过,这种防止桥接的方法不一定可取。例如,如果用户安装了手机应用,但未安装对应的手表应用,则 setLocalOnly 函数可能会阻碍桥接有帮助的通知。此外,用户可能有多块配对手表,不一定所有手表上都安装了手表应用。

使用关闭 ID 同步通知关闭

如果您使用桥接模式功能防止桥接,通知的关闭(取消)不会同步到用户的所有设备。不过,您可以通过 NotificationCompat.WearableExtender 类的下列函数使用关闭 ID:

public WearableExtender setDismissalId(String dismissalId)
public String getDismissalId()

要实现关闭同步,请使用 setDismissalId() 函数。当您调用 setDismissalId() 函数时,为每个通知传递一个字符串形式的全局唯一 ID。通知清除后,手表和配套手机上所有其他具有相同关闭 ID 的通知也会被关闭。要检索关闭 ID,请使用 getDismissalId()

在下例中,由于为新通知指定了全局唯一 ID,因此关闭同步处于启用状态:

NotificationCompat.WearableExtender wearableExtender =
  new NotificationCompat.WearableExtender().setDismissalId("abc123");
Notification notification = new NotificationCompat.Builder(context)
// ... set other fields ...
  .extend(wearableExtender)
  .build();

关闭 ID 在手表与 Android 手机配对时有效,但在手表与 iPhone 配对时无效。

桥接通知最佳做法

从穿戴式设备推送或移除桥接通知需要花费一定时间。在您设计通知时,请确保避免由这一延迟时间造成的意外行为。以下宗旨将帮助您确保桥接通知对异步通知有效:

设计注意事项

Android Wear 通知具有自己的设计宗旨。如需了解详细信息,请查阅 Material Design 页面。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)