手表表盘

为 Google Wear OS 智能手表创建应用。

注意:从 2024 年 7 月 10 日起,表盘必须使用手表表盘格式才能安装在预装 Wear OS 5 的新款手表上。在此帮助中心文章中了解有关面向用户的更改的更多信息。

此外,从 2025 年初开始(具体日期将于 2024 年第四季度公布),在 Google Play 上发布的所有新表盘都必须使用手表表盘格式。

最新更新 稳定版 候选版本 Beta 版本 Alpha 版本
2024 年 9 月 18 日 1.2.1 - - 1.3.0-alpha04

声明依赖项

要添加对 Wear 的依赖项,您必须将 Google Maven 代码库添加到您的项目中。阅读Google 的 Maven 代码库以了解更多信息。

在应用或模块的build.gradle文件中添加所需构件的依赖项

Groovy

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.2.1"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.2.1"

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

Kotlin

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.2.1")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.2.1")

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1"
}

有关依赖项的更多信息,请参阅添加构建依赖项

反馈

您的反馈有助于改进 Jetpack。如果您发现新的问题或有改进此库的想法,请告知我们。在创建新问题之前,请查看此库中现有问题。您可以通过点击星号按钮为现有问题投票。

创建新问题

有关更多信息,请参阅问题跟踪器文档

1.3 版

1.3.0-alpha04 版

2024 年 9 月 18 日

androidx.wear.watchface:watchface-*:1.3.0-alpha04 已发布。1.3.0-alpha04 版包含这些提交

新功能

  • UserStyleSettingsUserStyleOptions中添加了对图标懒加载的支持,这提高了加载表盘的性能。(Iaf43d
  • 添加了一个选项,允许在系统配置更改时(例如,如果语言环境更改)拍摄更新的屏幕截图,方法是使用新的Watchface.setUpdateScreenshotOnConfigurationChange。默认情况下,此设置处于关闭状态。(I765a1

错误修复

  • 删除了对新平台 API 的手动访问概述,因为在使用 R8(例如 R8 版本 3.3)与 AGP 7.3 或更高版本以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建中,这将通过 API 建模自动完成。建议不使用 AGP 的客户端更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅这篇文章。(Ia60e0b/345472586

1.3.0-alpha03 版本

2024 年 4 月 17 日

androidx.wear.watchface:watchface-*:1.3.0-alpha03 已发布。1.3.0-alpha03 版本包含这些提交

API 变更

  • 我们添加了EditorSession#setOverrideComplications,它在编辑期间临时设置底层 watchface 实例的ComplicationData。如果复杂功能变化不频繁,这比通过EditorSession#renderWatchFaceToBitmap传递覆盖更有效。(I19384

错误修复

  • 之前selectComplicationDataForInstant会为任何时间线调用toApiComplicationData,这意味着后续的===引用相等性测试将始终失败。这意味着复杂功能会在每一帧重新加载,导致耗电。(717406

1.3.0-alpha02 版本

2024 年 4 月 3 日

androidx.wear.watchface:watchface-*:1.3.0-alpha02 已发布。1.3.0-alpha02 版本包含这些提交

新功能

  • 我们现在使用引用相等性来比较最佳值和selectedData,因为 equals 运算符代价很高。(446b00

API 变更

  • 我们添加了一个GoalProgressComplicationData的无回退动态 API。(c33264

1.3.0-alpha01 版本

2024 年 2 月 7 日

androidx.wear.watchface:watchface-*:1.3.0-alpha01 已发布。1.3.0-alpha01 版本包含这些提交。

新功能

  • WatchFaceServices可以并发初始化,因此它们应该是无状态的,为了支持这一点,我们添加了StatefulWatchFaceService,其中createExtra()创建的用户定义额外数据将传递到初始化期间调用的所有覆盖方法中。
  • GlesRenderer2现在有一个构造函数重载,允许您指定要依次尝试的属性列表以及eglChooseConfig

API 变更

  • StatefulWatchFaceService现在支持getComplicationSlotInflationFactory的覆盖,其中createExtra()创建的用户定义额外数据将被传递进去。(I82d9f
  • 有些表盘需要在createUserStyleSchema期间创建的辅助数据与其他初始化方法共享。由于没有更好的替代方案,开发人员通常会使他们的WatchFaceServices成为有状态的。这是危险的,因为可以同时创建多个实例,这可能导致错误。为了解决这个问题,我们引入了StatefulWatchFaceServiceStatefulWatchFaceRuntimeService,其中createExtra()创建用户定义类型,并将其作为参数传递给各种创建方法。(If8a99
  • 我们已将getUserStyleFlavors添加到InteractiveWatchFaceClient,这主要对 OEM 而言很重要。(I0f5d8
  • GlesRenderer2现在有一个构造函数重载,允许您指定要依次尝试的属性列表以及eglChooseConfig。例如,这允许您首先尝试带有抗锯齿的配置,并在需要时回退到没有抗锯齿的配置。(I1ba74
  • 从 Android U 开始,WearOS 将添加对SystemDataSources.DATA_SOURCE_HEART_RATE的支持。此复杂功能仅保证支持SHORT_TEXT复杂功能,但建议ComplicationSlot也接受SMALL_IMAGE,因为 OEM 可以选择提供其健康应用程序的快捷方式而不是实时值。(I34223
  • 我们添加了METADATA_KEY_CONFIG_RESTORE_SUPPORTED,从 Android U 开始,它控制从备份恢复系统时对于具有METADATA_KEY_DATA_SOURCE_CONFIG_ACTION的复杂功能数据源会发生什么。默认情况下,系统假设复杂功能数据源服务支持任何配置数据的备份,但如果它不支持,则可以添加元数据设置METADATA_KEY_DATA_SOURCE_CONFIG_ACTION为 false,这将使复杂功能槽标记为未配置。(I6c505

1.2 版本

1.2.1 版本

2024 年 1 月 24 日

androidx.wear.watchface:watchface-*:1.2.1 已发布。1.2.1 版本包含这些提交。

错误修复

  • 修复了三星 Galaxy Watch 4、5 和 6 上的崩溃问题。(43f0b0

1.2.0 版本

2023 年 11 月 29 日

androidx.wear.watchface:watchface-*:1.2.0 已发布。1.2.0 版本包含这些提交。

自 1.1.0 版本以来的重要更改

  • 我们添加了一些新的复杂功能类型,可从 Android T 开始使用。
    • GoalProgressComplicationData类似于RangedValueComplicationData,不同之处在于它用于衡量目标进度,其中最小值隐式为零,并且值允许大于targetValue
    • WeightedElementsComplicationData由元素数组(权重和颜色的对)以及可选文本/标题/图像组成。这些可能显示为饼图,其中颜色需要根据上下文有意义,因为复杂功能中通常没有空间来渲染标签。
  • 我们为RangedValueComplicationData添加了对可选ColorRanges的支持。通常,复杂功能将以表盘选择的颜色呈现,但有时ComplicationDataSource最适合设置颜色,例如当它们具有特定语义含义时。例如,温度从红色到蓝色。
  • 几乎所有类型的ComplicationData现在都支持SmallImages
  • 我们添加了ComplicationDisplayPolicy,其中DO_NOT_SHOW_WHEN_DEVICE_LOCKED指示兼容的表盘在设备锁定后不显示复杂功能。
  • 从 Android T 开始,OEM 将能够通过其提供程序清单中的android.support.wearable.complications.SAFE_WATCH_FACES元数据中定义的列表确定复杂功能请求是否来自表盘,方法是使用ComplicationRequest#isForSafeWatchFace。提供程序需要com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE权限才能接收除 TargetWatchFaceSafety.UNKNOWN 之外的任何内容。
  • UserStyleFlavors已成为非实验性功能。

1.2.0-rc01 版本

2023 年 10 月 18 日

androidx.wear.watchface:watchface-*:1.2.0-rc01 已发布。1.2.0-rc01 版本包含这些提交。

1.2.0-beta02 版本

2023 年 9 月 6 日

androidx.wear.watchface:watchface-*:1.2.0-beta02 已发布。1.2.0-beta02 版本包含这些提交。

新功能

  • SuspendingComplicationDataSourceService#onDestroy现已开放。请注意,系统默认天气复杂功能的支持已被移除。

API 变更

  • 回滚“公开用于天气复杂功能的新数据源”。(I6f335)

1.2.0-beta01 版本

2023 年 8 月 23 日

androidx.wear.watchface:watchface-*:1.2.0-beta01 已发布。1.2.0-beta01 版本包含这些提交。

新功能

  • 从 Android T 开始,WearOS 现在将支持默认的天气系统复杂功能。

API 变更

  • 添加天气默认系统回退以应对复杂情况。(Ia0994
  • 此补丁添加了WatchFaceRuntimeServiceWatchFaceControlClient.createWatchFaceRuntimeControlClient以及 guava 包装器。这些增加了对 watch face 运行时(一种从另一个包加载其定义的特殊类型的 watch face)的支持。目前,WearOS 仅支持Android Watch Face 格式的运行时。(I2799f
  • 此补丁是对aosp/2636578的后续处理,我们重命名了 int 定义,因此任何依赖于WatchFaceTypeCanvasTypeTapTypeComplicationsSlotBoundsType的代码都不需要更改。(I4098b
  • 更新 API 文件以注释兼容性抑制。(I8e87ab/287516207
  • 此补丁在WatchFaceTypes中公开了WatchFaceType常量,在CanvasTypes中公开了CanvasType常量,在TapTypes中公开了TapType常量,以及在ComplicationsSlotBoundsType中公开了ComplicationsSlotBoundsType常量。(I3b85ab/288750666
  • WatchFace.OverlayStyle 使用率极低,并且 OEM 厂商支持不佳,因此我们将弃用它,并计划在稍后将其移除。(I7344a)

1.2.0-alpha09 版本

2023 年 6 月 21 日

已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha091.2.0-alpha09 版本包含这些提交。

新功能

  • RangedValueComplicationData.Builder 现在接受 DynamicFloat,并且新的 DynamicComplicationText 可作为 ComplicationText 的子类使用,两者都可以利用动态表达式以及在支持 Wear 4 设备上以 1Hz 更新的平台绑定。

API 变更

  • 添加了每日距离、每日卡路里和每日楼层的动态类型。平台健康数据源的键现在位于 PlatformHealthSources.Keys 下(Ib7637)
  • 实现 PlatformDataProvider 来提供心率和每日步数。SensorGateway 接口已从公共 API 中移除。(I55b84)
  • StateEntryValue 重命名为 DynamicDataValue,并更新状态 API 以使用 DynamicDataKey。(If1c01)
  • 添加 AppDataKey 用于访问应用推送状态;添加 PlatformDataKey 用于访问平台数据;在 StateStore 中添加命名空间支持。(I7985e)
  • enable/disablePlatformSource 方法已从 DynamicTypeEvaluator 中移除。调用者应负责更新。(I78c6d)
  • 允许限制绑定数据类型的尺寸。(Ie2966)

1.2.0-alpha08 版本

2023 年 4 月 19 日

已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha081.2.0-alpha08 版本包含这些提交。

新功能

  • 从 Android T 开始,具有特权 com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE 的复杂功能提供程序可以注册 androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES 元数据,该元数据会覆盖安全表盘的 android.support.wearable.complications.SUPPORTED_TYPES。这意味着复杂功能提供程序可以选择为受信任的和不受信任的表盘提供不同的类型。

API 变更

  • @Deprecated 类传播到属性(I882d1, b/271441831)
  • 更改了 Enum.valueOf 的值参数名称(Ia9b89)
  • 枚举 valueOf 中抛出的异常增多(I818fe)
  • 我们已移除 renderWatchFaceToSurface,改用基于 SurfaceControlViewHost 的 createRemoteWatchFaceView,允许调用者嵌入表盘中的视图,该视图在客户端调用 RemoteWatchFaceViewHost#renderWatchFace 时进行渲染。(Ib311d)
  • 我们已将 renderWatchFaceToSurface 添加到 InteractiveWatchFaceClientHeadlessWatchFaceClientEditorSession 中。通常情况下,这比渲染到位图更高效。(Ieacad)
  • ObservableStateStore 已重命名为 StateStore。(Ieb0e2)
  • 添加了 DynamicTypeEvaluator.Builder 来代替构造函数参数,以允许更多可选参数,包括 ObservableStateStore,它现在默认为空存储。(I6f832)
  • 重构了 DynamicTypeEvaluator 中参数的顺序。(Ic1ba4)
  • 已将执行器添加到 DynamicTypeEvaluator.bind 方法中。(I346ab)
  • 我们已将 startEvaluation 方法添加到 BoundDynamicType 中,以便在绑定动态类型后触发评估。(I19908)
  • 具有特权 com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE 的复杂功能提供程序可以注册 androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES 元数据,该元数据会覆盖安全表盘的 android.support.wearable.complications.SUPPORTED_TYPES。(Id1c73)
  • 我们已将 CustomValueUserStyleSettings2 重命名为 LargeCustomValueUserStyleSettings。(Ic17ac)

错误修复

  • DynamicTypeValueReceiver#onPreUpdate 已移除。(I2dc35)

1.2.0-alpha07 版本

2023 年 2 月 22 日

已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha071.2.0-alpha07 版本包含这些提交。

新功能

  • 从 Android T 开始,OEM 厂商可以通过其提供程序清单中的 android.support.wearable.complications.SAFE_WATCH_FACES 元数据中定义的列表来确定复杂功能请求是否来自表盘,方法是使用 ComplicationRequest#isForSafeWatchFace。提供程序需要 com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE 权限才能接收 TargetWatchFaceSafety.UNKNOWN 之外的任何内容。

  • 同样从 Android T 开始,可以使用 CustomValueUserStyleSetting2,它最多可以容纳 12.5kb。以前 CustomValueUserStyleSetting 的限制是 1kb。尽管尺寸限制有所增加,但仍鼓励表盘开发者保持数据较小,因为设置会在编辑期间通过蓝牙发送,而蓝牙带宽有限。

API 变更

  • 我们已向 GlesRendererGlesRenderer2 添加了一个可选参数 eglContextAttribList,允许您设置传递给 EGL14.eglCreateContextEGL14.EGL_CONTEXT_CLIENT_VERSION。(I2a83e)
  • 我们已将表盘库迁移到 androidx.core.util.Consumer,而不是 java.util.function.Consumer。(I273f5)
  • KT 属性访问器中抛出的异常增多(Iff9d9)
  • 我们添加了 InteractiveWatchFaceClient.isComplicationDisplayPolicySupported,以便客户端可以确定它是否必须代表旧表盘模拟支持。(I24c89)
  • 我们决定 isForSafeWatchFace 应该是一个三态 IntDef。(Ief2f7)
  • 对于 Android T,我们引入了 ComplicationRequest.isForSafeWatchFace,它旨在供 OEM 使用,并且需要 com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE。对于系统映像中的数据源,如果请求的表盘位于数据源清单中指定的安全表盘列表内,则此方法将返回 true。(I0cbb6)
  • 对于 Android T,我们添加了 CustomValueUserStyleSetting2,它最多可以容纳 12.5kb。以前 CustomValueUserStyleSetting 的限制是 1kb。(I0b100)

1.2.0-alpha06 版本

2023 年 1 月 25 日

已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha061.2.0-alpha06 版本包含这些提交。

新功能

  • 正在努力添加对复杂功能平台绑定的支持,但这尚未准备好使用,敬请期待!
  • 我们已为新的复杂功能类型 GOAL_PROGRESS 和 WEIGHTED_ELEMENTS 添加了 XML ComplicationSlot 支持。

错误修复

  • 修复了在三星设备上表盘编辑器未正确释放的内存泄漏问题。(3b5987)
  • 修复了在多个收藏夹表盘之间切换时,复杂功能有时无法正确显示的错误。(b38ece)
  • 修复了 perOptionScreenReaderNames 的序列化错误,该错误会导致表盘崩溃。(e9f466)

1.2.0-alpha05 版本

2022 年 12 月 7 日

已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha051.2.0-alpha05 版本包含这些提交。

新功能

  • 一段时间前,我们添加了对分层 UserStyleSettings 的支持,从 Android T 开始,现在可以在层次结构中拥有多个 ComplicationSlotsUserStyleSetting。根据用户的样式选择,只有一个 ComplicationSlotsUserStyleSetting 会处于活动状态。

  • 我们通过添加 screenReaderName 字段来改进对 ListOptionComplicationSlotsOption 的屏幕阅读器支持,请注意,在 Android T 之前,此字段将被配套编辑器忽略。

API 变更

  • 我们为编辑器添加了一个新的可选 screenReaderName 字段到 ListOptionComplicationSlotsOption - 在 Android T 之前的设备上,配套编辑器将忽略它。(I75326)
  • 从 Android T 开始,只要最多只有一个 ComplicationSlotsUserStyleSettings 可以在任何时间处于活动状态,就可以在样式层次结构中支持多个 ComplicationSlotsUserStyleSettings。我们已向 UserStyleSchema 添加了一个实用程序函数 findComplicationSlotsOptionForUserStyle,以帮助查找活动 ComplicationSlotsOption(如果有)。(Ic2b06)
  • 已将RangedValuesTypes移入RangedValueComplicationData的伴生对象中,并将其重命名为TYPE_UNDEFINEDTYPE_RATING,并添加了新的TYPE_PERCENTAGE。(I55d02
  • 我们将实验性的DynamicFloat重命名为FloatExpression,并将其标记为@hide。(Idf4f1
  • 添加@JvmDefaultWithCompatibility注解(I8f206

版本 1.2.0-alpha04

2022年11月9日

已发布androidx.wear.watchface:watchface-*:1.2.0-alpha04版本 1.2.0-alpha04 包含这些提交。

新功能

  • 对于Android T,我们添加了对两种新的复杂功能类型的支持:GoalProgressComplicationDataWeightedElementsComplicationData
  • GoalProgressComplicationData类似于RangedValueComplicationData,但其值允许超过目标值(对于RangedValueComplicationData,值被限制在[min .. max]范围内),这对视觉设计有影响,可能不适合所有表盘。
  • GoalProgressComplicationData增加了对饼图和类似简单数据细分的支持。
  • 我们为RangedValueComplicationData添加了对ColorRamps的可选支持。
  • 对于Android T,我们添加了ComplicationPersistencePolicysetCachePolicyComplicationData,目前允许提供商控制复杂功能是否持久化(即,是否在重启后缓存)。大多数复杂功能不需要设置缓存控制,但这样做可以修复某些频繁更新的复杂功能(例如健康数据复杂功能)中陈旧数据的极端情况。我们还添加了ComplicationDisplayPolicy,其中DO_NOT_SHOW_WHEN_DEVICE_LOCKED指示兼容的表盘在设备锁定后不显示复杂功能。(Ic9574

API 变更

  • GoalProgressComplicationDataWeightedElementsComplicationDataColorRamp不再是实验性的。(Ica9e2
  • ComplicationPersistencePolicyComplicationDisplayPolicy现在已正确标记为T API。(I31d88
  • 已弃用的ComplicationSlotOverlay构造函数现在具有DeprecationLevel.WARNING,允许再次从Java调用它。(Ib308c
  • 我们通过使用@JvmDefaultWithCompatibility注解修复了ComplicationRequestListenerCanvasComplicationComplicationTapFilterInteractiveWatchFaceClient的一些Java兼容性问题。(Id94fc
  • 我们删除了实验性的ProtoLayoutComplicationDataListComplicationData。这些的开发者故事并不清晰,我们希望将来能重新审视。(I9df05
  • 我们向RangedValueComplicationData添加了一个ValueTypeWeightedElementsComplicationData现在支持背景颜色。我们删除了DiscreteRangedValueComplicationData,因为它的功能是WeightedElementsComplicationData的一个子集。(I6446c

错误修复

  • 在equals和hash code中包含isForScreenShot。确保onRenderParametersChanged获得正确的isForScreenshot值(I04a41
  • 修复了无头客户端中WatchFaceControlService的内存泄漏。(e90e00

版本 1.2.0-alpha03

2022年10月5日

已发布androidx.wear.watchface:watchface-*:1.2.0-alpha03版本 1.2.0-alpha03 包含这些提交。

新功能

  • 没有新增功能,但我们修复了几个表盘编辑器错误。

API 变更

  • 由于rootUserStyleSettings变为非实验性,因此已弃用UserStyleSchema.userStyleSettings。(Ie96e3
  • rootUserStyleSettings移出实验性。(I8d6b3
  • 我们已将WatchFaceColors标记为实验性,因为它并非所有系统都支持。(I6d75d
  • 在公共API中公开DisconnectReasons以使其与IntDef一起工作。(I791f8

错误修复

  • 如果SysUI崩溃,则关闭表盘编辑器中任何打开的项目。如果SysUI崩溃且表盘编辑器未关闭,则表盘可能处于不一致状态,因为系统依赖于SysUI来持久化任何用户样式更改。(ba762a
  • 修复了ComplicationDataSourceInfoRetriever中的内存泄漏,其中kotlin协程延续充当gc根并保留编辑器活动。(33ee06

版本 1.2.0-alpha02

2022年9月21日

已发布androidx.wear.watchface:watchface-*:1.2.0-alpha02版本 1.2.0-alpha02 包含这些提交。

新功能

  • 一些表盘在UserStyle之外具有影响其视觉效果的配置(例如,选择背景照片)。我们添加了Renderer.sendPreviewImageNeedsUpdateRequest,允许表盘请求更新的预览图像。请注意,这需要相应的系统更新才能工作。

  • 我们还添加了一个API,用于表盘向系统公开其颜色,系统可能会根据此颜色选择其调色板。**注意**,这已在后续补丁中被设置为实验性。

  • 几乎所有类型的ComplicationData现在都支持SmallImages

API 变更

  • 壁纸管理器有时可能会从引擎分离并创建另一个引擎。我们添加了一个DisconnectReason int def 并使用包含DisconnectReason的新方法扩展了ClientDisconnectListener,允许侦听器观察引擎分离。(I45cce
  • ComplicationSlotOverlay构造函数添加了两个可选参数nameResourceIdscreenReaderResourceIdI157e8
  • 我们为具有PreviewImageUpdateRequestedListenergetOrCreateInteractiveWatchFaceClient的新重载添加了一个guava包装器。(Ic31f0
  • 我们添加了Renderer.sendPreviewImageNeedsUpdateRequest,这对于具有UserStyleSchema之外的状态并影响其外观的表盘(例如,具有可选背景图像的表盘)非常有用。在客户端,我们添加了PreviewImageUpdateRequestedListener作为getOrCreateInteractiveWatchFaceClient的可选参数来观察这些请求。(Iff44a
  • 我们简化了公开WatchFaceColors的API,现在Renderer上有一个名为watchFaceColors的简单属性,表盘可以根据需要设置,以响应任何样式更改。我们添加了OnWatchFaceColorsListenerInteractiveWatchFaceClient,而不是使用WallpaperManager来观察颜色变化。(I490bc
  • 我们添加了一个WatchFaceColors类,它包含三种最突出的表盘颜色,并向Renderer添加了公开方法watchfaceColorsnotifyWatchFaceColorsChanged,这些允许系统通过WallpaperManager.getWallpaperColors获取表盘的颜色。(I3d611
  • ShortTextComplicationDataRangedValueComplicationDataNoPermissionComplicationData(以及实验性的DiscreteRangedValueComplicationDataGoalProgressComplicationDataWeightedElementsComplicationData)现在都支持SmallImages。如果表盘选择使用多种颜色渲染复杂功能,现在可以选择使用多色SmallImage,而以前它必须使用单色图像。(I257df
  • PreviewImageUpdateRequestedListener重构为Consumer<>。(Ia875d
  • 将自定义单抽象方法(SAM)类型OnWatchfaceColorsListener替换为泛型Java SAM类型(Consumer)。(I0c489
  • 我们已弃用不指定PreviewImageUpdateRequestedListener的旧getOrCreateInteractiveWatchFaceClientlistenableGetOrCreateInteractiveWatchFaceClient方法。(Iec502

错误修复

  • 已将DisconnectReason.BINDER_DIED重命名为DisconnectReason.ENGINE_DIED。(I4eb0e)

1.2.0-alpha01 版本

2022年8月10日

已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha011.2.0-alpha01 版本包含这些提交。

新功能

  • 我们添加了对各种新的复杂功能格式的实验性支持。这是一个积极开发的领域;这些新格式可能会随时更改,并且目前CanvasComplicationDrawable没有渲染器支持。
  • 我们还为复杂功能槽添加了可选边距,这使得小型复杂功能更容易点击。

API 变更

  • 实验性的BoundingArc类现在是不可变的。(If624a)
  • 小型复杂功能可能难以点击。为了缓解这个问题,我们引入了对边距的支持,这增加了可点击区域而不会影响渲染。除非在代码或 XML 中指定,否则ComplciationSlots 的边距大小为零。(I14089)
  • getComplicationSlotInflationFactory(CurrentUserStyleRepository)签名更改为返回非空工厂实例。之前返回 null 是一个错误,因此这只是使 API 契约更清晰。(I0fcc0)
  • 我们向WatchFaceService.getComplicationSlotInflationFactory方法添加了currentUserStyleRepository参数,以与createComplicationSlotsManager保持一致。(I2ddd2)
  • UserStyleFlavors已成为非实验性功能。(I69cdc)
  • 我们已从RangedValueComplicationData中删除了实验性的ValueType,并引入了实验性的DiscreteRangedValueComplicationData,它类似于RangedValueComplicationData,但用于整数范围和值。我们还引入了实验性的GoalProgressComplicationData,它类似于RangedValueComplicationData,但用于目标进度,其中最小值隐式为零,并且值允许大于targetValue。请注意,对于所有RangedValue变体,必须至少指定单色图像、文本或标题之一。(I9590c)
  • 我们删除了ComplicationSlotState中的boundsWithMargins,因为系统软件没有它的用例。(I42e26)
  • 我们添加了对WeightedElementsComplicationData的实验性支持,它由元素数组(权重和颜色的对)以及可选文本/标题/图像组成。这些可能会显示为饼图,其中颜色需要根据上下文具有意义,因为复杂功能中通常没有空间来渲染标签。(I87eea)
  • RangedValueComplicationDataGoalProgressComplicationData可选使用的实验性ColorRamps现在允许您指定最多七种颜色的序列以及一个标志,该标志声明颜色是否应平滑过渡或是否应渲染大小相等的纯色步骤。(I9f5bf)
  • 已将RangedValueComplicationData.drawSegmented更改为valueType,它是一个具有相应ValueType IntDef的整数,它为范围值提供语义含义,并且可以被复杂功能渲染器用来影响样式。(I0616b)
  • 我们为RangedValueComplicationData添加了对可选ColorRanges的实验性支持。通常,复杂功能将以表盘选择的颜色进行渲染,但有时ComplicationDataSource最适合设置颜色,例如当它们具有特定语义含义时。例如,温度为红色到蓝色。(I5153a)
  • 我们为RangedValueComplicationData添加了一个实验性的drawSegmented提示。这向渲染器发出信号,指示使用段绘制范围值指示器,其中 1 个段 = 1 个单元。(I7d7c1)

错误修复

  • 我们添加了相对于预定义屏幕坐标系定义ComplicationSlotBounds 的能力。(I0985d)

1.1 版本

1.1.1 版本

2022年8月10日

已发布 androidx.wear.watchface:watchface-*:1.1.11.1.1 版本包含这些提交。

  • 这是一个错误修复版本,强烈建议 1.1.0 版本的用户升级。

错误修复

  • 表盘初始化是异步的,如果在表盘准备好之前收到复杂功能,它将被放入pendingInitialComplications列表中并在稍后应用。不幸的是,pendingInitialComplications应用得太早,这意味着在表盘初始化期间有一段时间窗口,复杂功能仍然会被放入pendingInitialComplications并被忽略。此问题现已修复。此外,此补丁修复了ComplicationRenderer错误地尝试异步加载占位符的错误,导致失败并导致编译图形无法更新。最后,此补丁修复了一个希望是理论上的错误,即需要合并多个pendingInitialComplications。(0d03ba3)

  • 修复了InteractiveInstanceManager中的潜在死锁问题,其中getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance锁定的时间过长。通常我们期望engine.setUserStyle很快,但如果由于某种原因它没有很快,那么我们最终可能会遇到死锁/ANR。此补丁将不必要的工作移出锁之外,消除了死锁的可能性。(5a2adca)

  • 修复了保留WatchFaceService的几个问题。WakeLock 有时会保留WatchFaceService,添加release()调用可以修复此问题。此外,StateFlows可以保留WatchFaceService,取消底层的CoroutineScopes可以修复此问题。(fd48138)

  • awaitDeferredWatchFace*添加超时,并修复watchfaceOverlayStyleNullPointerException。在正常情况下,这不应该超时,包括新安装和 CPU 负载较高的DirectBoot场景。如果在close()之后调用getWatchfaceOverlayStyle,我们也修复了 NPE。(a4c3a5a)

1.1.0 版本

2022年6月15日

已发布 androidx.wear.watchface:watchface-*:1.1.01.1.0 版本包含这些提交。

自 1.0.0 版本以来的重要更改

改进的编辑功能

  • 我们添加了对分层架构的支持,允许编辑器 UI 描述样式的层次结构。您现在可以指定单独的图标供手表表盘和配套编辑器使用。
  • 现在可以选择支持手表表盘的多个实例,每个实例在所有 API 表面都有一个唯一的 ID。
  • 您现在可以为ComplicationSlots指定人类可读的名称,供编辑器使用。
  • 对样式“风格”的实验性支持,这是配套编辑器中可见的一组精选样式。
  • 当编辑手表表盘的两个实例时,手表表盘实例现在可以共享资源,从而节省内存。
  • 在手表表盘编辑器中选择复杂功能时,现在会预选当前提供程序。

改进的复杂功能

  • 您现在可以为主要和次要数据源指定ComplicationType,从而为开箱即用的体验提供给开发者更多灵活性。
  • 我们添加了ComplicationDataTimeline,它提供了一系列时间门控数据,这些数据将被传递到手表表盘,可以缓存并自动更新。例如,今天不同时间的预报或多个即将发生的日历事件。
  • 复杂功能提供程序的ComponentNameComplicationData的一部分。
  • 复杂功能现在已缓存,这在手表表盘之间切换时提供了更好的体验。

其他更改

  • UserStyleSchemaComplicationSlots现在可以在 XML 中定义。这简化了手表表盘的构建,并允许从系统更快地查询元数据。
  • 手表表盘现在可以影响用于渲染系统覆盖层的颜色。

1.1.0-rc01 版本

2022年5月18日

已发布 androidx.wear.watchface:watchface-*:1.1.0-rc011.1.0-rc01 版本包含这些提交。

新功能

  • 我们对手表表盘 XML 支持进行了一些可用性调整,使指定ComplicationSlotBounds和支持引用更容易。对边缘复杂功能BoundingArc的实验仍在继续,尽管当时不建议使用它,但它已连接到drawHighlight

API 变更

  • 我们添加了drawHighlight的实验性重载,它接受BoundingArc参数。(I705f8)
  • 手表表盘 XML 现在支持资源引用。它允许您在 XML 和代码中使用相同的常量。(I3ef61)
  • 我们添加了使用center_xcenter_ysize_xsize_y形式定义ComplicationSlotBounds 的能力。现在还可以使用资源引用使用不同的单位(即 dp)。(Iace98)

错误修复

  • 修复了在错误的上下文中运行任务的runBlockingWithTracing。(4f595fe)
  • 使BaseEditorSession.close同步。BaseEditorSession.close异步的问题在于我们释放ComplicationDataSourceInfoRetriever的时间太晚,导致 logcat 中出现警告垃圾邮件。这可能是无害的,但 logcat 垃圾邮件会分散注意力,应该避免。(35a5308)

1.1.0-beta02 版本

2022年5月11日

已发布 androidx.wear.watchface:watchface-*:1.1.0-beta021.1.0-beta02 版本包含以下提交。

新功能

  • 我们添加了对新的实验性 ComplicationData 类型的支持,这些类型尚未准备好使用,敬请期待。

API 变更

  • 我们添加了 BoundingArc,这是一个实验性类,用于描述边缘复杂功能槽的几何形状。它已添加到 ComplicationSlot 中,并已贯穿到 ComplicationSlotStateWatchFaceMetadataClient。(I61a40
  • 我们添加了在 UserStyleSetting XML 中继承设置的功能。它允许您减少冗余并共享表盘之间的设置。(Ief841
  • 我们添加了两种新的实验性 ComplicationData 类型:ListComplicationDataProtoLayoutComplicationData。目前这两种类型都没有渲染支持,如果添加到 ComplicationDataSource 的清单中,Wear OS 也不会识别这些类型。(I1811c

错误修复

  • 修复了 TimeLineEntry 类型的序列化问题。我们没有序列化 TimeLineEntry 类型,这意味着类型为 NoData 的缓存 TimeLineEntries 将被错误地解释为具有父复杂功能的类型,从而在访问不存在的必需字段时导致 NPE。(55ffdf5
  • 修复了 setComplicationData 丢弃时间线字段的错误(fb392f5
  • 修复了 runBlockingWithTracing 偶尔会导致 NPE 的错误(12ca62e
  • 修复了在接收复杂功能时有时会遇到 ClassNotFoundException: android.support.wearable.complications.ComplicationText 的错误(217942d9
  • 修复了 GlesRenderer.backgroundThreadInitInternal 中的错误,该错误仅在调用 EGL14.eglCreateContext 时才调用 onBackgroundThreadGlContextCreated。修复了另一个错误,该错误是由 verticalFlip 引起的屏幕截图中的视觉故障。(c674ad2
  • 修复了 WatchFaceService XML 版本检查,它从错误的包中加载。(dfa06f3
  • 占位符线格式现在使用内部捆绑包。我们不希望占位符破坏可能使用隐藏的内部 a.s.w.c.ComplicationData 的现有表盘。以前,NoDataComplication 数据的线格式将占位符存储在常用字段中(有问题的,因为旧表盘会渲染占位符字符串,这并非预期),现在我们使用内部捆绑包来完全隔离它。(d5e7bd2

1.1.0-beta01 版本

2022 年 4 月 20 日

已发布 androidx.wear.watchface:watchface-*:1.1.0-beta011.1.0-beta01 版本包含以下提交。

API 变更

  • 现在 WatchFaceMetadataClient 方法(getUserStyleSchemagetComplicationSlotMetadataMapgetUserStyleFlavors)和 HeadlessWatchFaceClient.getUserStyleFlavors 抛出未经检查的 RuntimeException,而不是 WatchFaceException。(I0718a
  • WatchFaceMetadataClient.WatchFaceException 已移出类,以便可以重复使用。(I4e869

错误修复

  • WatchFaceMetadataClient 在发送部分 ComplicationSlotBounds 时将不再崩溃。(Iaafd

1.1.0-alpha05 版本

2022 年 4 月 6 日

已发布 androidx.wear.watchface:watchface-*:1.1.0-alpha051.1.0-alpha05 版本包含以下提交。

新功能

  • 您现在可以通过检查 ComplicationData.dataSource 来确定哪个数据源发送了 ComplicationData,某些表盘可以使用此功能来自定义复杂功能显示。(I44a73

API 变更

  • Renderer.CanvasRendererRenderer.GlesRenderer 已弃用,取而代之的是 Renderer.CanvasRenderer2Renderer.GlesRenderer2,它们支持传递到渲染方法的 SharedAssets。对于 Java 互操作,我们引入了 ListenableCanvasRenderer2ListenableGlesRenderer2。(I31ffa
  • 添加了 @WatchFaceFlavorsExperimental 功能来定义风格 - 预配置的风格化表盘列表(I04dd0
  • Renderer.sharedAssets 现在是 StateFlow,我们删除了未使用的 Renderer.SharedAssetsFactoryI12ac5
  • UserStyleSchema.userStyleSettings 不再弃用(Iba7e3
  • 我们添加了 HeadlessWatchFaceClient.getUserStyleSchemaDigestHash,它允许 HeadlessWatchFaceClient 在计算摘要哈希之前避免通过 AIDL 传递架构的相对较低的开销。(I33597
  • 我们在 WatchFaceMetadataClient 中添加了 isUserStyleSchemaStatic,如果且仅当可以依赖 UserStyleSchema 不变(除非表盘 APK 更新)时,此值为 true。(I45a3f
  • 我们在 UserStyleSchema 中添加了 getDigestHash,它计算架构的摘要哈希。这可用于有效地确定 UserStyleSchema 是否已更改。(I2063d
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED 重命名为 METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTEDI9ba5d
  • UserStyleSetting.OnWatchEditorData 已重命名为 UserStyleSetting.WatchFaceEditorData,它包含仅由手表表盘编辑器使用的相关数据。(If3afb

1.1.0-alpha04 版本

2022 年 3 月 9 日

已发布 androidx.wear.watchface:watchface-*:1.1.0-alpha041.1.0-alpha04 版本包含以下提交。

API 变更

  • 最新的 ComplicationData 可能并不总是可用(例如,已过期的缓存 ComplicationData),因此我们使用可选的占位符 ComplicationData 扩展了 NoDataComplication,并添加了 ComplicationText.PLACEHOLDERMonochromaticImage.PLACEHOLDERSmallImage.PLACEHOLDERPhotoImage.PLACEHOLDER,这些仅允许在 NoDataComplicationData 占位符的上下文中使用。如果选中,建议使用灰色方框/弧线来渲染这些占位符。(I6285d
  • 我们添加了 ComplicationData.getNextChangeInstant,它告诉您参考时间点之后复杂功能的任何字段可能发生更改的下一个时间点。这在内部用于安排复杂功能更新的帧。例如,如果表盘通常每分钟更新一次,则设置秒表复杂功能将使其每秒更新一次。(I7ceb2
  • 现在可以在所有 API 级别上使用 EditorSession.watchFaceId。此外,其值现在将始终与 WatchState.watchFaceInstanceId 保持一致。(I323b9
  • 由于框架中已修复了底层问题,因此 getPendingIntentForTouchEvent API 不再需要,因此所有相关 API 都已删除。即使最近按下了主页按钮,表盘也不需要为 PendingIntents 的触发执行任何特殊操作。(I1f2e8
  • 我们添加了 RendererParameters.isForScreenShot,如果渲染用于屏幕截图,则此值为 true。一些带有动画的表盘需要知道这一点才能进行调整以确保获得最佳效果。(I96d99
  • 我们在 WatchFaceException 中添加了 WatchFaceExceptionReason,以便为出错的原因提供一些上下文。(I01d15
  • 已删除 ComplicationDataSourceService.onImmediateComplicationRequest,而是添加了 ComplicationRequest.immediateResponseRequired 来表示提供程序需要快速响应(理想情况下在 <100ms 内响应)。请注意,此功能受特权 com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE 权限的保护。(Ie6b23
  • 更新了核心和 appcompat 中的可空性,以匹配 Tiramisu DP2(I0cbb7

错误修复

  • 如果架构验证失败,表盘应用程序现在将因异常而崩溃(Ia400f

1.1.0-alpha03 版本

2022 年 2 月 9 日

已发布 androidx.wear.watchface:watchface-*:1.1.0-alpha031.1.0-alpha03 版本包含以下提交。

API 变更

  • 我们添加了对分层样式架构的实验性支持。我们在 androidx.wear.watchface.style.UserStyleSetting.Option 中添加了一个新属性 childSettings,该属性最初仅由 ListOption 使用。这允许为编辑器 UI 描述样式的层次结构,底层的 UserStyle 保持不变,仍然是 Map<String, ByteArray>。(Iaf6f4
  • 我们添加了WatchFace.OverlayStyle,允许表盘配置系统状态叠加层的渲染。(I8520d
  • 我们引入了clearWithBackgroundTintBeforeRenderingHighlightLayer,这是CanvasRenderer的一个新的可选构造函数参数(默认为false)。如果设置为true,则画布将使用背景色调颜色清除。(Ie01e5
  • 添加了androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED元数据键,允许复杂组件数据源指示它们可以在没有任何配置的情况下提供默认值(Icc0d4
  • 编辑表盘时,通常同时存在交互式和无头实例。为了节省内存,我们引入了Renderer.SharedAssets,允许表盘渲染器在实例之间共享不可变数据(例如纹理和着色器)。GlesRenderer.setEglConfigGlesRenderer.setEglDisplay已弃用,本来就不打算让这些可设置,这样做会导致未定义的行为。(I0d9e7
  • 我们向ComplicationSlot.Builder添加了setNameResourceIdsetScreenReaderNameResourceId(引用字符串资源),并在androidx.wear.watchface.client.ComplicationSlotState中添加了相应的getter方法。这允许系统获取ComplicationSlots的名称,以便在编辑器和屏幕阅读器中使用。(If6c6a
  • WatchfaceMetadataClient.getUserStyleSchemagetComplicationSlotMetadataMap现在抛出WatchFaceException而不是RemoteException。(I86f11
  • ComplicationDataSourceService中的onSynchronousComplicationRequest和相关函数已重命名为onImmediateComplicationRequest等。(I87ba0
  • 手表表盘编辑器比配套编辑器的屏幕空间要小得多,因此支持手表表盘编辑器不同的图标是有意义的。此补丁将OnWatchEditorData(目前仅包含图标)添加到所有UserStyleSettings及其相应的Option类中。(If1886
  • 我们为ListenableGlesRenderer的构造函数添加了@JvmOverloads,以更好地进行Java互操作。(I2974a

错误修复

  • ListenableGlesRenderer的构造函数现在被正确地标记为@Throws(GlesException::class),现在可以在Java中扩展此类。(Iac6d0
  • 修复了PhotoImageComplicationData tapAction未正确处理的bug(I1cc30

版本 1.1.0-alpha02

2022年1月12日

androidx.wear.watchface:watchface-*:1.1.0-alpha02已发布。版本1.1.0-alpha02包含这些提交。

新功能

  • 为了帮助调试和测试,ComplicationData及其相关的子类现在具有重写的hashcode、equals和toString方法,使它们更容易使用。

API 变更

  • WatchfaceMetadataClient方法再次抛出RemoteExceptions(在适当的情况下),使客户端代码更容易捕获来自表盘的错误。(I78785
  • ComplicationData和子类现在具有hashcode、equals和toString。(I24bc6

版本 1.1.0-alpha01

2021年12月15日

androidx.wear.watchface:watchface-*:1.1.0-alpha01已发布。版本1.1.0-alpha01包含这些提交。

新功能

  • UserStyleSchemaComplicationSlots现在可以在XML中定义。这简化了表盘的构建。此外,WatchFaceMetadataClient查询速度更快,因为它不需要绑定到服务来获取元数据。WatchFaceMetadataClientListenableWatchFaceMetadataClient不再是实验性的,并将成为稳定API的一部分。系统将能够可选地支持表盘的多个实例,每个实例都有不同的用户定义样式选项。这些将在表盘选择器中可见。要选择此选项,表盘必须在其清单中包含以下元数据标记。

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • 某些表盘的状态未在UserStyle中捕获,为了支持这一点和多个实例,表盘的实例ID现在可通过WatchState.watchFaceInstanceId获得。

  • ComplicationData现在被缓存,以便在加载时立即显示复杂组件。有时ComplicationData由系统缓存在内存中,有时由表盘库序列化。如果序列化任何关联的tapAction将会丢失,如果发生这种情况,ComplicationData.tapActionLostDueToSerialization将返回true,并且表盘应以不同的方式渲染复杂组件(例如,灰色或半透明),以表示它无法点击。系统将尽快发送带有tapAction的更新ComplicationData

  • 某些ComplicationData不应该长时间缓存,为了支持这一点,我们添加了一个更通用的功能ComplicationDataTimeline。这可用于提供一系列时间门控的ComplicationData传递到表盘,这些数据可以自动缓存和更新。例如,今天不同时间的预报或多个即将发生的日历事件。ComplicationRequestListener已扩展了一个新方法onComplicationDataTimeline,您可以使用它来返回此数据。

  • DefaultComplicationDataSourcePolicy已扩展,因此您可以为主要和次要数据源指定ComplicationType

  • 我们添加了对同步复杂组件提供程序的支持,其中复杂组件的更新频率高于正常频率,在表盘可见且非环境模式下,每秒最多一次。*注意:*由于内存压力问题,同步复杂组件提供程序的使用可能有限。

  • PendingIntentTapListener的更改可能会被恢复,因为我们在框架中解决了根本问题(在按下主页按钮后5秒内,表盘无法启动活动)。

API 变更

  • ComplicationData.isCached已更改为tapActionLostDueToSerialization,这在确定是否应以不同方式渲染复杂组件插槽以表示它无法点击时更有用。(I6de2f
  • wear-complication-data-source添加了ComplicationDataTimeline。这可用于提供一系列时间门控的ComplicationData传递到表盘,这些数据可以自动缓存和更新。例如,今天不同时间的预报或多个即将发生的日历事件。ComplicationRequestListener已扩展了一个新方法onComplicationDataTimeline,您可以使用它来返回此数据。还有一个新的Kotlin包装器SuspendingTimelineComplicationDataSourceService用于挂起数据源服务。(Idecdc
  • 添加了PendingIntentTapListenerWatchFaceControlClient.getPendingIntentForTouchEvent。这可以帮助需要响应点击启动意图的表盘解决框架在按下主页按钮后5秒内阻止启动新活动的问题。(I98074
  • 引入了每个表盘的ComplicationData缓存。其目的是允许表盘在加载时显示最新的已知复杂组件数据值,直到系统有机会更新它们为止。有一个新的API方法WatchFaceControlClient.hasComplicationCache供OEM使用。这可能会影响系统向表盘发送复杂组件的策略。此外,ComplicationData有一个isCached属性,建议以不同的方式渲染缓存的复杂组件,因为tapAction无法缓存,并且在缓存的复杂组件中将为null。(I404b0
  • 表盘的实例ID现在可通过WatchState.watchFaceInstanceId获得。大多数表盘不需要使用它,但是如果存在未存储在Schema中的每个表盘状态,那么这就是用于标识表盘实例的关键。为了支持这一点,您现在可以在调用WatchFaceControlClient.createHeadlessWatchFaceClient时提供ID。(I1ff98
  • 扩展了DefaultComplicationDataSourcePolicy,使其能够为主要、次要提供程序和回退系统提供程序设置默认的ComplicationTypesComplicationSlot.defaultDataSourceType现已弃用。(If0ce3
  • ComplicationSlot.configExtras现在是可变的,可以在调用EditorSession.openComplicationDataSourceChooser()之前更新。(I6f852
  • 添加了WatchFace.setComplicationDeniedDialogIntentsetComplicationRationaleDialogIntent。这些意图启动以显示请求复杂组件权限之前的理由对话框,以及另一个对话框,解释在尝试编辑权限已被拒绝的复杂组件时需要复杂组件权限(提供程序选择器将无法打开,因此需要对话框)。(I3a29c)
  • UserStyleSchemaComplicationSlots现在可以在XML中定义。这简化了表盘的构建,并使WatchFaceMetadataClient查询速度更快,因为它们不需要绑定到服务来获取元数据。(I85bfa
  • 添加了InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent,以便客户端可以确定表盘是否支持getPendingIntentForTouchEvent。(I0b917
  • WatchFaceMetadataClientListenableWatchFaceMetadataClient不再是实验性的。它们可以用来有效地获取表盘元数据,在可能的情况下无需打开到表盘的绑定器。(Ibb827
  • 添加了对同步复杂组件提供程序的支持,其中复杂组件的更新频率高于正常频率,在表盘可见且非环境模式下,每秒最多一次。要使用此功能,提供程序必须在其清单中包含一个新的androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS元数据标记,并覆盖onSynchronousComplicationRequest。根据数据源的性质,它可能还需要覆盖onStartSynchronousComplicationRequestsonStopInteractiveComplicationRequests以获取复杂组件进入和退出交互模式的通知。(I8fe9d

版本 1.0

版本 1.0.1

2022 年 2 月 9 日

已发布 androidx.wear.watchface:watchface-*:1.0.1版本 1.0.1 包含这些提交。

错误修复

  • 修复了PhotoImageComplicationData tapAction未正确处理的bug(I1cc30

版本 1.0.0

2021 年 12 月 1 日

已发布 androidx.wear.watchface:watchface-*:1.0.0版本 1.0.0 包含这些提交。

1.0.0 主要功能

androidx.wear.watchface 包是开发 WearOS 表盘的推荐库。与旧的 Wearable Support Library 相比,它具有许多新功能。

  • 库直接支持用户样式(例如,更改调色板、表盘指针样式、时标外观等)(参见 androidx.wear.watchface.style)。现在使用 androidx.wear.watchface.editor 开发表盘编辑器更加容易,并且您的表盘可以从系统配套应用程序进行编辑,而无需编写任何额外代码。
  • 内置最佳实践。库会自动为复杂功能生成屏幕阅读器内容标签(您也可以添加自己的标签),并且在电池电量不足且未充电时,帧率会自动降低以延长电池续航时间。
  • 开发表盘所需的代码更少,尤其对于复杂功能,许多样板代码已移入库中。

错误修复

  • 修复 EditorSession.userStyle.compareAndSet (I6f676)
  • 修复表盘延迟时间过短的问题 (Iffb97)
  • 在 UI 线程上调度 InteractiveWatchFaceImpl.onDestroy (I83340)
  • 修复广播接收器中的多个问题 (I7d25f)

版本 1.0.0-rc01

2021 年 11 月 3 日

已发布 androidx.wear.watchface:watchface-*:1.0.0-rc01版本 1.0.0-rc01 包含这些提交。

错误修复

  • 修复 `dump()`(由 adb shell dumpsys 调用),该方法被流迁移破坏。( 087cf9e)

  • 确保 `writeDirectBootPrefs` 的正确顺序。我们希望 `writeDirectBootPrefs` 始终在 `initStyleAndComplications` 之后运行,否则可能会延迟 UI 线程初始化。( 37650ac)

  • 确保调用 `Renderer.onDestroy`。在渲染器已创建但 WF 初始化尚未完成并且调用 `Engine.onDestroy` 的情况下,我们需要调用 `Renderer.onDestroy`。( f9952dc)

  • 针对 `isBatteryLowAndNotCharging` 的优化/修复。此补丁将 `isBatteryLowAndNotCharging` 的初始设置提前,这意味着它可以与 `createWatchFace` 并行执行。此外,我们现在监听 `ACTION_POWER_DISCONNECTED`。( ddffd80)

  • 关闭后,`InteractiveWatchFaceClientImpl.isConnectionAlive` 为 false ( ab9774e)

版本 1.0.0-beta01

2021 年 10 月 27 日

已发布 androidx.wear.watchface:watchface-*:1.0.0-beta01版本 1.0.0-beta01 包含这些提交。

版本 1.0.0-alpha24

2021 年 10 月 13 日

已发布 androidx.wear.watchface:watchface-*:1.0.0-alpha24版本 1.0.0-alpha24 包含这些提交。

API 变更

  • androidx.wear.watchface.complications 包中的类已移动到新的 wear:watchface:watchface-complications 项目中。请注意,这意味着您不能同时包含此库以及任何先前版本的 wear:watchface:watchface-complications-data,因为您会收到关于重复类的错误。( I97195)
  • `Renderer.dump` 已重命名为 `Renderer.onDump`,并已添加 `@UiThread` 注解。( I44845)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener 已重命名为 addOnWatchFaceReadyListenerremoveWatchFaceReadyListener 已重命名为 removeOnWatchFaceReadyListener。( I48fea)
  • `EditorSession` 的 getComplicationsPreviewDatagetComplicationsDataSourceInfo 不再是挂起函数,而是值为最初为 null 的 StateFlow<> 属性。在 `ListenableEditorSession` 中,getListenableComplicationPreviewDatagetListenableComplicationsProviderInfo 已被删除,取而代之的是基类中的新的 StateFlow<> 对象。如果您需要在 Java 代码中监听更改,请考虑使用 androidx.lifecycle.FlowLiveDataConversions.asLiveData 转换为 LiveData<>。( Ic5483)

版本 1.0.0-alpha23

2021 年 9 月 29 日

已发布 androidx.wear.watchface:watchface-*:1.0.0-alpha23版本 1.0.0-alpha23 包含这些提交。

新功能

表盘库现在是一个单一的库组,因此库已移动,您需要按如下方式更新 Gradle 导入

旧版 新版
androidx.wear:wear-complications-data androidx.wear.watchface:watchface-complications-data
androidx.wear:wear-complications-data-source androidx.wear.watchface:watchface-complications-data-source
androidx.wear:wear-watchface androidx.wear.watchface:watchface
androidx.wear:wear-watchface-complications-rendering androidx.wear.watchface:watchface-complications-rendering
androidx.wear:wear-watchface-client androidx.wear.watchface:watchface-client
androidx.wear:wear-watchface-client-guava androidx.wear.watchface:watchface-client-guava
androidx.wear:wear-watchface-data androidx.wear.watchface:watchface-data
androidx.wear:wear-watchface-editor androidx.wear.watchface:watchface-editor
androidx.wear:wear-watchface-editor-guava androidx.wear.watchface:watchface-editor-guava
androidx.wear:wear-watchface-guava androidx.wear.watchface:watchface-guava
androidx.wear:wear-watchface-style androidx.wear.watchface:watchface-style

API 变更

  • 将独立的 androidx.wear 表盘和复杂功能库迁移到 androidx.wear.watchface 库组。( b25f3c0)
  • 添加 `EditorRequest.canWatchFaceSupportHeadlessEditing` 以让客户端知道表盘编辑器是否支持无头编辑。请注意,由于支持是在 asop/1756809 中添加的,因此会有一些误报,但它将为所有未来的表盘返回正确的值。( ca55590)
  • `Renderer` 现在有一个 `dump()` 方法,可以重写该方法以将自定义数据添加到 ABD shell dumpsys activity service WatchFaceService 生成的信息中。( 95235f9)
  • `InteractiveWatchFaceClient.addWatchFaceReadyListener` 现在首先指定执行器。( 563ac2f)
  • 已删除 `StateFlowCompatHelper`。应改用 `asLiveData` (androidx.lifecycle.asLiveData)。( bd35d3)
  • `CurrentUserStyleRepository.userStyle` 不再是可变的。( I44889)
  • `WatchFaceReadyListener` 已重命名为 `OnWatchFaceReadyListener`。( Ic12a9)

错误修复

  • `InteractiveInstanceManager.deleteInstance` 调用 `onDestroy`。这对于确保 `InteractiveWatchFaceImpl` 被垃圾回收是必要的。( fce4af8, b/199485839)