问题标签 [android-wear-complication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
481 浏览

android - Android Wear 2.0 - 提供多种复杂功能

如何仅使用一个并发症提供者提供多种类型的并发症?我想达到与“android wear”应用程序相同的效果。他们只有一个供应商和报价日期、下一个事件、照片、计步器等。

文档仍然很差,我看不到任何正在谈论的内容。

谢谢你。

0 投票
1 回答
367 浏览

android - 表盘并发症选择器从未显示

我正在尝试为我的手表实现复杂功能支持。这是我的 AndroidManifest。

我有一个表盘服务和一个配置活动。当我使用 ComplicationHelperActivity 从配置活动中创建ProviderChooserHelperIntent 时,我总是在 onActivityResult 中取消结果。这是我开始选择器活动并听取结果的方式

似乎我缺少并发症支持,这就是为什么不能选择任何提供者。但为了测试这一点,我从 WatchFace 示例中复制了 ComplicationSimpleWatchFaceService,但仍然没有任何结果。这是表盘上的复杂代码。

0 投票
1 回答
153 浏览

android-wear-2.0 - Android Wear 2.0 将复杂功能设置为 TYPE_EMPTY

目前有没有一种方法可以根据其 id 调用/设置并发症的类型为 TYPE_EMPTY?我知道我想基本上“关闭”或设置为 TYPE_EMPTY 以及何时需要,但我不确定如何在不访问 ComplicationManager 实例的情况下访问内部并发症系统来更新并发症。

本质上,我将如何以编程方式关闭并发症,例如在 ComplicationHelperActivity 中手动将并发症单击为“空”?

0 投票
1 回答
763 浏览

android - 如何从 Android Wear 复杂功能提供程序在表盘上绘制图标?

使用 Complications API 有一个图标类型,但是在绘制图标时我不知道该怎么做。

当我绘制实际的表盘时,似乎没有 drawIcon 方法。例如像 canvas.drawIcon(icon) 这样的东西。我只能看到如何绘制位图。

在我的 drawComplications 方法中,我有这个:

然后如何将图标绘制到画布上?

这里的代码实验室没有告诉我们如何绘制图标:https ://codelabs.developers.google.com/codelabs/complications/index.html?index=..%2F..%2Findex#3

相反,我可以将所有可绘制对象复制到本地可穿戴模块,并通过传入字符串绕过图标​​类型,然后从那里绘制适当的位图。但是必须有一种从图标中绘制的方法,否则为什么要有它?

我也无法从谷歌搜索中找到如何将图标转换为位图,但这似乎也很愚蠢,因为我必须首先将位图转换为图标,因为 API 需要一个图标。

任何帮助表示赞赏。

谢谢。

0 投票
1 回答
295 浏览

android - 如何在 android wear 上的 ICON、RANGED_VALUE、SMALL_IMAGE 的表盘上设置复杂度

我试图在 android 表盘上绘制图标,但在表盘上没有看到。我已经检查了这个链接。参考我在表盘上设置了复杂类型文本的文本,但它没有设置为 ICON、RANGED_VALUE、SMALL_IMAGE 等其他类型,所以请提出建议。

我需要这种类型的图标,其中红色标记复杂。

我需要这种类型的图标,其中红色标记复杂。我使用此代码绘制文本。

并将此代码用于图像但没有得到任何东西。

0 投票
1 回答
638 浏览

android - Android Wear 复杂功能更新行为

我尝试使用RandomNumberProviderService作为指南在 Android Wear 中编写复杂服务,但是当我点击复杂时和只需要以编程方式更新信息时(当手表收到 DataApi 时),我无法找到一种分离行为的方法改变)。点击并发症应该会向手持设备发送一条消息,现在可以了,但我无法仅更新有关并发症的信息。

0 投票
1 回答
357 浏览

android - 您如何使并发症具有适应性?

我正在关注本教程,了解如何使用ComplicationDrawable. 我想不通的是如何ComplicationDrawable对内容做出响应?例如,如果底部复杂的数据类型是ComplicationData.TYPE_LONG_TEXT,我如何使我的ComplicationDrawable更宽以适应文本?

这是我如何绘制复杂性界限的代码

我在任何地方都找不到这样的例子,所以也许不可能。

0 投票
1 回答
309 浏览

android - Android Wear 2.0 开发复杂功能

我有一个现有的 Android 应用程序,我想为其提供 Wear 2.0 复杂功能。我不希望创建自定义 Wear 表盘或配套 Wear 应用程序 - 我只是希望能够创建用户应该能够添加到现有表盘的复杂功能。这可能吗?阅读文档在我看来,我需要创建自定义表盘或应用程序才能提供复杂功能。我现在有点困惑。对此的任何指示将不胜感激。

0 投票
1 回答
944 浏览

android - Android Wear 2 中的未读通知计数并发症

我正在开发一系列 Android Wear 2 表盘,显然我发现了一个我无法解决的问题。

在图片中,您可以看到来自 Google 的两个简单表盘(抱歉,我还不能嵌入图片)。第一个来自 Google Developer Codelabs 示例项目。

Google Developer Codelabs 表盘

第二个默认安装在 AW2 中,称为“Elements 模拟”(但也有一个“Elements Digital”,非常相似)。我已经禁用了除了左边的所有其他并发症。

Elements 模拟表盘

两个表盘都显示来自同一并发症数据提供程序的信息,即系统未读通知计数(在并发症帮助程序中,选择常规 -> 未读通知计数)。

但是,如您所见,相同的信息以两种截然不同的方式显示。

我的问题是,我无法理解这是怎么可能的。未读通知计数并发症是类型TYPE_ICON

根据文档,ComplicationData与 type 的并发症相关的唯一信息TYPE_ICON是一个图标,可以通过调用来检索complicationData.getIcon()。而且,事实上,图标就在那里,它是未读通知的实际数量的图像。圆圈中的数字图像(如您在第一个表盘中看到的)。没有铃铛图标(第二个表盘),并且另一个变量中没有单独的未读计数值。没有什么。

我以为我可以避免使用 Complications Drawable 方法来绘制并发症并以我自己的方式进行绘制,但是,正如我所说,我对并发症的唯一了解是,当它被创建或更新时,它是TYPE_ICON类型。没有其他的。没有提供者名称,没有价值。只是一个数字图标。

我错过了什么?如何以类似于第二张图片中的方式绘制复杂功能?

谢谢。

0 投票
1 回答
464 浏览

android - 实时复杂性的 Android Wear 2.0 架构问题

无论其他已安装的应用程序和表盘如何,我都在开发一系列我想要的复杂功能。是的,在某些时候我正在重新发明轮子,但同时我将其用作学习项目。这也将确保我始终拥有我使用的所有复杂功能,并且它们都具有相同的格式和样式,而不是依赖 3rd 方应用程序单独提供它们。

该套装将包含心率、gps 坐标、小时、分钟、秒、dd/MM 日期、dd/MM/yy 日期、电池等的并发症。

当我开始对所有这些进行编程时,我发现了几个有问题的部分(很可能是因为这是我第一次开发复杂功能,或者是用于 Android Wear 的应用程序),因此提出了这个问题。

请注意,其中一些行为可能特定于 Huawei Watch 2 LTE。

1)升级间隔推/拉。

我理解数据提供者的复杂性,他们的唯一职责是将数据提供给任何表盘调用它们。这意味着我们不确定(并且我们依赖表盘开发人员)了解复杂性并相应地请求更新。如果不及时更新(例如显示秒),这会使一些复杂性完全无用。也可以留给显示旧数据的并发症(例如旧的 GPS 坐标、旧的心率 bpm)。好吧,我决定ProviderUpdateRequesterAlarmManagerto push来实现数据到表盘。问题再次是应该更快发生的并发症,例如秒,因为如果计划过于频繁,Android 将阻止待处理的意图。因此,为了解决这个问题,我决定在同一个服务实例中使用 Android 处理程序,但由于下一个主题,这不是一个好主意。

2) 并发症生命周期

通过调试,我发现正在执行的对象的实例,,,ComplicationProviderService可以不同。这意味着这不是一个始终运行的粘性服务(单个实例),而是每次更新都会创建一个新的服务实例。这是有问题的,因为初始化复杂度很高:例如 GPS 或心率监测器需要侦听新值,并且可能需要一段时间才能检索到第一个值。而且,对于那些不能依赖 AlarmManager 和/或需要在更新执行之间保持某种状态的复杂情况。onComplicationActivatedonComplicationUpdateonComplicationDeactivated

3) 显示感知服务

为了绕过前一点,假设您的复杂服务上有静态变量,这些变量onComplicationActivatedonComplicationDeactivated. 例如,这可能是获取 LocationProvider 的引用并开始侦听位置更新。这将确保每次调用onComplicationUpdate都不必执行重/冷初始化,并且可以访问最新数据。但是,这也意味着无论是否onComplicationUpdate调用您的逻辑都会执行。当处于环境模式(或屏幕关闭)时,表盘可以通过不调用来决定不更新并发症onComplicationUpdate,但它不知道我们的静态逻辑,也不知道ComplicationProviderService当屏幕进入环境模式或打开/关闭时有一个回调调用。这是一个问题,因为在我们的示例中,如果屏幕关闭,我们仍将监听 GPS 坐标,并且很可能会耗尽电池电量。当然,我们可以通过使用 BroadcastReceiver (Intent.ACTION_SCREEN_ON/OFF) 和 的组合来处理这个问题DisplayManager.DisplayListener,但话又说回来,不确定我是否在这里采取了正确的路径,因为这意味着我们现在正在创建需要的服务静态地了解显示器的状态。

4)检测屏幕开/关

当环境模式被禁用时, BroadcastReceiverforIntent.ACTION_SCREEN_ON/OFF按预期工作,但它没有被启用。启用环境模式Intent.ACTION_SCREEN_OFF时,在进入环境模式时调度,但Intent.ACTION_SCREEN_ON在退出环境模式时不调度。虽然有点复杂,但这可以通过使用DisplayManager.DisplayListener获取onDisplayChanged回调的更新来完成。

TL;RD

1) 您如何确保表盘及时显示您的复杂功能以始终拥有正确和最新的信息?

ComplicationProviderService2)如果每次onComplicationUpdate调用服务实例都不同,你如何处理重/冷初始化?

3) 让长时间运行的服务显示感知是一件疯狂的事情吗?

4) 从技术上讲,在环境模式下屏幕仍然亮着,那么为什么Intent.ACTION_SCREEN_OFF要广播?为什么Intent.ACTION_SCREEN_ON/OFF启用环境模式时不对称?

5)也许并发症不应该用于暴露实时信息?

非常感谢