【问题标题】:Hide the open on phone action on wearable隐藏可穿戴设备上的打开电话操作
【发布时间】:2014-09-16 08:59:34
【问题描述】:

如何抑制可穿戴设备上的“在手机上打开”操作?我添加了一个更有用的自定义操作,它现在是一个重复操作。知道如何删除它吗?

这是我如何构建通知的一个片段:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
    .setContentTitle("Title")
    .setContentText("Message")
    .setSmallIcon(R.drawable.icon)
    .setContentIntent(openIntent);
NotificationCompat.WearableExtender extender =
                   new NotificationCompat.WearableExtender();
extender.addAction(new NotificationCompat.Action.Builder(icon, "do something",
                   openIntent).build());
builder.extend(extender);

我知道我可以创建第二个通知,该通知仅在可穿戴设备上可见,但 android 不希望我需要创建一个单独的通知,不是吗?

【问题讨论】:

  • 对不起,但我不明白最后一句话(你想说什么):“[...]但是我需要创建一个单独的 android 不能想要不是通知吗?”
  • 我的意思是可以为设备和可穿戴设备创建单独的通知,但我认为开销太大。
  • 您查看过 SDK 管理器为 Android Wear 提供的“通知”示例吗?看看您是否可以从该示例中生成您想要的通知类型,它的 UI 可以提供几乎所有可能的组合。
  • @WaynePiekarski 我猜你说的是sdk\samples\android-20\wearable\Notifications\Wearable\src\main\java\com\example\android\support\wearable\notifications 对吧?
  • @rekire:几乎正确 - 您需要将 sdk/samples/android-20/wearable/Notifications 导入 Android Studio,并构建示例的手机版本并运行它。手机版本在Application目录下,相关代码在sdk/samples/android-20/wearable/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications

标签: android android-pendingintent wear-os


【解决方案1】:

根据documentation,当您在setContentIntent(PendingIntent intent) 方法中设置任何PendingIntent 时,会自动添加“在手机上打开”操作。

当此通知出现在手持设备上时,用户可以调用指定的 PendingIntent 通过触摸通知的 setContentIntent() 方法。当此通知出现在 Android 可穿戴设备,用户可以向左滑动通知以显示打开操作,其中 在手持设备上调用意图。


我认为您不能“禁用”此操作(除了不指定 contentIntent,但我想这不是您的解决方案)。

我不熟悉您的确切情况,但大多数人在通知上设置contentIntent 以启动一些显示详细信息或允许用户执行更多操作(如输入、配置等)的Activity。在这种情况下,即使您在 Android Wear 设备上提供某种“轻量级”解决方案,我也认为没有必要尝试禁用此额外操作。

但是,如果您真的想摆脱这种“在手机上打开”操作(同时仍然在手机上设置 contentIntent),则需要从 Android Wear 设备发布单独的通知。

您需要使用DataApi 来同步您的通知状态。在文档中查看有关DataApi 的更多详细信息:
https://developer.android.com/training/wearables/data-layer/index.html https://developer.android.com/training/wearables/data-layer/data-items.html

您还可以查看DataApi in one of my answers 的用法示例。

【讨论】:

  • 我或多或少熟悉 DataAPI,当我知道我应该显示我的通知时,我如何才能获得相同的风格等。我也可以在可穿戴设备上使用通知 API ?
  • 在您的手机上,您必须在手机通知中添加setLocalOnly(boolean),以防止它显示在 Android Wear 设备上。然后,您必须在 Android Wear 设备上“复制”此通知。为了实现“相同的外观”,您可以共享生成通知的代码(当然,根据您的目的进行一些修改,例如不为可穿戴版本指定 setContentIntent)。然后你会得到基本相同的通知,但没有“在手机上打开”操作。
  • 我知道 setLocalOnly() 方法但我还没有找到反模式,我还在可穿戴通知中堆叠了通知。所以群黑也是没办法的选择。
  • 所以唯一的解决方案就像我说的那样 - 您需要实现可穿戴应用并从那里发布通知 + 使用 DataApi 将这些通知与手机同步。 AFAIK 没有其他解决方案可以使用您想要的功能来实现它。
  • 我明天会尝试在可穿戴设备本身上创建一个通知,也许这也可以。
【解决方案2】:

对于 Wear OS 2.x,此答案似乎已过时。我正在尝试尽快更新此答案。

我最终创建了多个通知。这是一个例子:

// for the wearable
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
    .setContentTitle("Title")
    .setContentText("Message")
    .setSmallIcon(R.drawable.icon)
    .setContentIntent(openIntent)
    .setGroup("MyGroup")
    .setDeleteIntent(magic());
    // since I don't set setGroupSummary(true) this
    // notification will not been display on a mobile
NotificationCompat.WearableExtender extender =
                   new NotificationCompat.WearableExtender();
extender.addAction(new NotificationCompat.Action.Builder(icon, "do something",
                   openIntent).build());
builder.extend(extender);
// fire it

// for the mobile
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
    .setContentTitle("Title")
    .setContentText("Message")
    .setSmallIcon(R.drawable.icon)
    .setContentIntent(openIntent)
    .setLocalOnly(true) // the magic to hide it on the wearable
    .setDeleteIntent(magic());
// fire it

使用magic(),我创建了一个调用BroadcastReciever 的PendingIntent,该BroadcastReciever 隐藏了其他通知以使它们保持同步。

【讨论】:

  • 这是我在此处描述的方法:stackoverflow.com/a/24916387/3827276 但由于您希望在此通知(即分组)中有一些操作,这不是最好的方法。此解决方案的问题是您最终会得到只有一个通知的组 - 它会像单个通知一样显示,但您将无法滑动到操作页面。您需要点击它(进入该组中唯一的一个通知(应该在 Android Wear 平台 IMO 上修复)。也许这在新的 AW 系统更新中已修复,您能确认一下吗?
  • 您能否确认这个问题(来自我上面的评论)是否发生在较新的 Android Wear 系统更新上?这对我很重要,谢谢!
  • 对不起,我错过了您的评论,如果这是唯一需要再次点击的通知,您是对的。但我也认为这种行为是 AW 的错误。
  • 是的,这确实是一种糟糕的用户体验 - 用户看到一个看起来与标准通知完全一样的通知 - 但行为不同,需要点击才能显示操作:\ 我真的希望他们能修复这种行为- 那么这个具有单个通知组的解决方案将非常适合在 Wear 上提供替代通知,而无需在可穿戴端实现它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多