手表表盘
注意:从 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 版包含这些提交。
新功能
- 在
UserStyleSettings
和UserStyleOptions
中添加了对图标懒加载的支持,这提高了加载表盘的性能。(Iaf43d) - 添加了一个选项,允许在系统配置更改时(例如,如果语言环境更改)拍摄更新的屏幕截图,方法是使用新的
Watchface.setUpdateScreenshotOnConfigurationChange
。默认情况下,此设置处于关闭状态。(I765a1)
错误修复
- 删除了对新平台 API 的手动访问概述,因为在使用 R8(例如 R8 版本 3.3)与 AGP 7.3 或更高版本以及在使用 AGP 8.1 或更高版本(例如 D8 版本 8.1)的所有构建中,这将通过 API 建模自动完成。建议不使用 AGP 的客户端更新到 D8 版本 8.1 或更高版本。有关更多详细信息,请参阅这篇文章。(Ia60e0,b/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
成为有状态的。这是危险的,因为可以同时创建多个实例,这可能导致错误。为了解决这个问题,我们引入了StatefulWatchFaceService
和StatefulWatchFaceRuntimeService
,其中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)
- 此补丁添加了
WatchFaceRuntimeService
和WatchFaceControlClient.createWatchFaceRuntimeControlClient
以及 guava 包装器。这些增加了对 watch face 运行时(一种从另一个包加载其定义的特殊类型的 watch face)的支持。目前,WearOS 仅支持Android Watch Face 格式的运行时。(I2799f) - 此补丁是对aosp/2636578的后续处理,我们重命名了 int 定义,因此任何依赖于
WatchFaceType
、CanvasType
、TapType
或ComplicationsSlotBoundsType
的代码都不需要更改。(I4098b) - 更新 API 文件以注释兼容性抑制。(I8e87a,b/287516207)
- 此补丁在
WatchFaceTypes
中公开了WatchFaceType
常量,在CanvasTypes
中公开了CanvasType
常量,在TapTypes
中公开了TapType
常量,以及在ComplicationsSlotBoundsType
中公开了ComplicationsSlotBoundsType
常量。(I3b85a,b/288750666) WatchFace.OverlayStyle
使用率极低,并且 OEM 厂商支持不佳,因此我们将弃用它,并计划在稍后将其移除。(I7344a)
1.2.0-alpha09 版本
2023 年 6 月 21 日
已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha09
。1.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-alpha08
。1.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
添加到InteractiveWatchFaceClient
、HeadlessWatchFaceClient
和EditorSession
中。通常情况下,这比渲染到位图更高效。(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-alpha07
。1.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 变更
- 我们已向
GlesRenderer
和GlesRenderer2
添加了一个可选参数eglContextAttribList
,允许您设置传递给EGL14.eglCreateContext
的EGL14.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-alpha06
。1.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-alpha05
。1.2.0-alpha05 版本包含这些提交。
新功能
一段时间前,我们添加了对分层
UserStyleSettings
的支持,从 Android T 开始,现在可以在层次结构中拥有多个ComplicationSlotsUserStyleSetting
。根据用户的样式选择,只有一个ComplicationSlotsUserStyleSetting
会处于活动状态。我们通过添加
screenReaderName
字段来改进对ListOption
和ComplicationSlotsOption
的屏幕阅读器支持,请注意,在 Android T 之前,此字段将被配套编辑器忽略。
API 变更
- 我们为编辑器添加了一个新的可选
screenReaderName
字段到ListOption
和ComplicationSlotsOption
- 在 Android T 之前的设备上,配套编辑器将忽略它。(I75326) - 从 Android T 开始,只要最多只有一个
ComplicationSlotsUserStyleSettings
可以在任何时间处于活动状态,就可以在样式层次结构中支持多个ComplicationSlotsUserStyleSettings
。我们已向UserStyleSchema
添加了一个实用程序函数findComplicationSlotsOptionForUserStyle
,以帮助查找活动ComplicationSlotsOption
(如果有)。(Ic2b06) - 已将
RangedValuesTypes
移入RangedValueComplicationData
的伴生对象中,并将其重命名为TYPE_UNDEFINED
、TYPE_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,我们添加了对两种新的复杂功能类型的支持:
GoalProgressComplicationData
和WeightedElementsComplicationData
。 GoalProgressComplicationData
类似于RangedValueComplicationData
,但其值允许超过目标值(对于RangedValueComplicationData
,值被限制在[min .. max]范围内),这对视觉设计有影响,可能不适合所有表盘。GoalProgressComplicationData
增加了对饼图和类似简单数据细分的支持。- 我们为
RangedValueComplicationData
添加了对ColorRamps
的可选支持。 - 对于Android T,我们添加了
ComplicationPersistencePolicy
和setCachePolicy
到ComplicationData
,目前允许提供商控制复杂功能是否持久化(即,是否在重启后缓存)。大多数复杂功能不需要设置缓存控制,但这样做可以修复某些频繁更新的复杂功能(例如健康数据复杂功能)中陈旧数据的极端情况。我们还添加了ComplicationDisplayPolicy
,其中DO_NOT_SHOW_WHEN_DEVICE_LOCKED
指示兼容的表盘在设备锁定后不显示复杂功能。(Ic9574)
API 变更
GoalProgressComplicationData
、WeightedElementsComplicationData
和ColorRamp
不再是实验性的。(Ica9e2)ComplicationPersistencePolicy
和ComplicationDisplayPolicy
现在已正确标记为T API。(I31d88)- 已弃用的
ComplicationSlotOverlay
构造函数现在具有DeprecationLevel.WARNING
,允许再次从Java调用它。(Ib308c) - 我们通过使用
@JvmDefaultWithCompatibility
注解修复了ComplicationRequestListener
、CanvasComplication
、ComplicationTapFilter
和InteractiveWatchFaceClient
的一些Java兼容性问题。(Id94fc) - 我们删除了实验性的
ProtoLayoutComplicationData
和ListComplicationData
。这些的开发者故事并不清晰,我们希望将来能重新审视。(I9df05) - 我们向
RangedValueComplicationData
添加了一个ValueType
。WeightedElementsComplicationData
现在支持背景颜色。我们删除了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
构造函数添加了两个可选参数nameResourceId
和screenReaderResourceId
(I157e8) - 我们为具有
PreviewImageUpdateRequestedListener
的getOrCreateInteractiveWatchFaceClient
的新重载添加了一个guava包装器。(Ic31f0) - 我们添加了
Renderer.sendPreviewImageNeedsUpdateRequest
,这对于具有UserStyleSchema
之外的状态并影响其外观的表盘(例如,具有可选背景图像的表盘)非常有用。在客户端,我们添加了PreviewImageUpdateRequestedListener
作为getOrCreateInteractiveWatchFaceClient
的可选参数来观察这些请求。(Iff44a) - 我们简化了公开
WatchFaceColors
的API,现在Renderer上有一个名为watchFaceColors
的简单属性,表盘可以根据需要设置,以响应任何样式更改。我们添加了OnWatchFaceColorsListener
到InteractiveWatchFaceClient
,而不是使用WallpaperManager
来观察颜色变化。(I490bc) - 我们添加了一个
WatchFaceColors
类,它包含三种最突出的表盘颜色,并向Renderer添加了公开方法watchfaceColors
和notifyWatchFaceColorsChanged
,这些允许系统通过WallpaperManager.getWallpaperColors
获取表盘的颜色。(I3d611) ShortTextComplicationData
、RangedValueComplicationData
、NoPermissionComplicationData
(以及实验性的DiscreteRangedValueComplicationData
、GoalProgressComplicationData
和WeightedElementsComplicationData
)现在都支持SmallImages
。如果表盘选择使用多种颜色渲染复杂功能,现在可以选择使用多色SmallImage
,而以前它必须使用单色图像。(I257df)- 将
PreviewImageUpdateRequestedListener
重构为Consumer<>
。(Ia875d) - 将自定义单抽象方法(SAM)类型
OnWatchfaceColorsListener
替换为泛型Java SAM类型(Consumer)。(I0c489) - 我们已弃用不指定
PreviewImageUpdateRequestedListener
的旧getOrCreateInteractiveWatchFaceClient
和listenableGetOrCreateInteractiveWatchFaceClient
方法。(Iec502)
错误修复
- 已将
DisconnectReason.BINDER_DIED
重命名为DisconnectReason.ENGINE_DIED
。(I4eb0e)
1.2.0-alpha01 版本
2022年8月10日
已发布 androidx.wear.watchface:watchface-*:1.2.0-alpha01
。1.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) RangedValueComplicationData
和GoalProgressComplicationData
可选使用的实验性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.1
。1.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
*添加超时,并修复watchfaceOverlayStyle
NullPointerException
。在正常情况下,这不应该超时,包括新安装和 CPU 负载较高的DirectBoot
场景。如果在close()
之后调用getWatchfaceOverlayStyle
,我们也修复了 NPE。(a4c3a5a)
1.1.0 版本
2022年6月15日
已发布 androidx.wear.watchface:watchface-*:1.1.0
。1.1.0 版本包含这些提交。
自 1.0.0 版本以来的重要更改
改进的编辑功能
- 我们添加了对分层架构的支持,允许编辑器 UI 描述样式的层次结构。您现在可以指定单独的图标供手表表盘和配套编辑器使用。
- 现在可以选择支持手表表盘的多个实例,每个实例在所有 API 表面都有一个唯一的 ID。
- 您现在可以为
ComplicationSlots
指定人类可读的名称,供编辑器使用。 - 对样式“风格”的实验性支持,这是配套编辑器中可见的一组精选样式。
- 当编辑手表表盘的两个实例时,手表表盘实例现在可以共享资源,从而节省内存。
- 在手表表盘编辑器中选择复杂功能时,现在会预选当前提供程序。
改进的复杂功能
- 您现在可以为主要和次要数据源指定
ComplicationType
,从而为开箱即用的体验提供给开发者更多灵活性。 - 我们添加了
ComplicationDataTimeline
,它提供了一系列时间门控数据,这些数据将被传递到手表表盘,可以缓存并自动更新。例如,今天不同时间的预报或多个即将发生的日历事件。 - 复杂功能提供程序的
ComponentName
是ComplicationData
的一部分。 - 复杂功能现在已缓存,这在手表表盘之间切换时提供了更好的体验。
其他更改
UserStyleSchema
和ComplicationSlots
现在可以在 XML 中定义。这简化了手表表盘的构建,并允许从系统更快地查询元数据。- 手表表盘现在可以影响用于渲染系统覆盖层的颜色。
1.1.0-rc01 版本
2022年5月18日
已发布 androidx.wear.watchface:watchface-*:1.1.0-rc01
。1.1.0-rc01 版本包含这些提交。
新功能
- 我们对手表表盘 XML 支持进行了一些可用性调整,使指定
ComplicationSlotBounds
和支持引用更容易。对边缘复杂功能BoundingArc
的实验仍在继续,尽管当时不建议使用它,但它已连接到drawHighlight
。
API 变更
- 我们添加了
drawHighlight
的实验性重载,它接受BoundingArc
参数。(I705f8) - 手表表盘 XML 现在支持资源引用。它允许您在 XML 和代码中使用相同的常量。(I3ef61)
- 我们添加了使用
center_x
、center_y
、size_x
、size_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-beta02
。1.1.0-beta02 版本包含以下提交。
新功能
- 我们添加了对新的实验性
ComplicationData
类型的支持,这些类型尚未准备好使用,敬请期待。
API 变更
- 我们添加了
BoundingArc
,这是一个实验性类,用于描述边缘复杂功能槽的几何形状。它已添加到ComplicationSlot
中,并已贯穿到ComplicationSlotState
和WatchFaceMetadataClient
。(I61a40) - 我们添加了在
UserStyleSetting
XML 中继承设置的功能。它允许您减少冗余并共享表盘之间的设置。(Ief841) - 我们添加了两种新的实验性
ComplicationData
类型:ListComplicationData
和ProtoLayoutComplicationData
。目前这两种类型都没有渲染支持,如果添加到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-beta01
。1.1.0-beta01 版本包含以下提交。
API 变更
- 现在
WatchFaceMetadataClient
方法(getUserStyleSchema
、getComplicationSlotMetadataMap
、getUserStyleFlavors
)和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-alpha05
。1.1.0-alpha05 版本包含以下提交。
新功能
- 您现在可以通过检查
ComplicationData.dataSource
来确定哪个数据源发送了ComplicationData
,某些表盘可以使用此功能来自定义复杂功能显示。(I44a73)
API 变更
Renderer.CanvasRenderer
和Renderer.GlesRenderer
已弃用,取而代之的是Renderer.CanvasRenderer2
和Renderer.GlesRenderer2
,它们支持传递到渲染方法的SharedAssets
。对于 Java 互操作,我们引入了ListenableCanvasRenderer2
和ListenableGlesRenderer2
。(I31ffa)- 添加了
@WatchFaceFlavorsExperimental
功能来定义风格 - 预配置的风格化表盘列表(I04dd0) Renderer.sharedAssets
现在是 StateFlow,我们删除了未使用的Renderer.SharedAssetsFactory
(I12ac5)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_SUPPORTED
(I9ba5d)UserStyleSetting.OnWatchEditorData
已重命名为UserStyleSetting.WatchFaceEditorData
,它包含仅由手表表盘编辑器使用的相关数据。(If3afb)
1.1.0-alpha04 版本
2022 年 3 月 9 日
已发布 androidx.wear.watchface:watchface-*:1.1.0-alpha04
。1.1.0-alpha04 版本包含以下提交。
API 变更
- 最新的
ComplicationData
可能并不总是可用(例如,已过期的缓存 ComplicationData),因此我们使用可选的占位符 ComplicationData 扩展了NoDataComplication
,并添加了ComplicationText.PLACEHOLDER
、MonochromaticImage.PLACEHOLDER
、SmallImage.PLACEHOLDER
、PhotoImage.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-alpha03
。1.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.setEglConfig
和GlesRenderer.setEglDisplay
已弃用,本来就不打算让这些可设置,这样做会导致未定义的行为。(I0d9e7) - 我们向
ComplicationSlot.Builder
添加了setNameResourceId
和setScreenReaderNameResourceId
(引用字符串资源),并在androidx.wear.watchface.client.ComplicationSlotState
中添加了相应的getter方法。这允许系统获取ComplicationSlots的名称,以便在编辑器和屏幕阅读器中使用。(If6c6a) WatchfaceMetadataClient.getUserStyleSchema
和getComplicationSlotMetadataMap
现在抛出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包含这些提交。
新功能
UserStyleSchema
和ComplicationSlots
现在可以在XML中定义。这简化了表盘的构建。此外,WatchFaceMetadataClient
查询速度更快,因为它不需要绑定到服务来获取元数据。WatchFaceMetadataClient
和ListenableWatchFaceMetadataClient
不再是实验性的,并将成为稳定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) - 添加了
PendingIntentTapListener
和WatchFaceControlClient.getPendingIntentForTouchEvent
。这可以帮助需要响应点击启动意图的表盘解决框架在按下主页按钮后5秒内阻止启动新活动的问题。(I98074) - 引入了每个表盘的
ComplicationData
缓存。其目的是允许表盘在加载时显示最新的已知复杂组件数据值,直到系统有机会更新它们为止。有一个新的API方法WatchFaceControlClient.hasComplicationCache
供OEM使用。这可能会影响系统向表盘发送复杂组件的策略。此外,ComplicationData
有一个isCached
属性,建议以不同的方式渲染缓存的复杂组件,因为tapAction
无法缓存,并且在缓存的复杂组件中将为null
。(I404b0) - 表盘的实例ID现在可通过
WatchState.watchFaceInstanceId
获得。大多数表盘不需要使用它,但是如果存在未存储在Schema中的每个表盘状态,那么这就是用于标识表盘实例的关键。为了支持这一点,您现在可以在调用WatchFaceControlClient.createHeadlessWatchFaceClient
时提供ID。(I1ff98) - 扩展了
DefaultComplicationDataSourcePolicy
,使其能够为主要、次要提供程序和回退系统提供程序设置默认的ComplicationTypes
。ComplicationSlot.defaultDataSourceType
现已弃用。(If0ce3) ComplicationSlot.configExtras
现在是可变的,可以在调用EditorSession.openComplicationDataSourceChooser()
之前更新。(I6f852)- 添加了
WatchFace.setComplicationDeniedDialogIntent
和setComplicationRationaleDialogIntent
。这些意图启动以显示请求复杂组件权限之前的理由对话框,以及另一个对话框,解释在尝试编辑权限已被拒绝的复杂组件时需要复杂组件权限(提供程序选择器将无法打开,因此需要对话框)。(I3a29c) UserStyleSchema
和ComplicationSlots
现在可以在XML中定义。这简化了表盘的构建,并使WatchFaceMetadataClient
查询速度更快,因为它们不需要绑定到服务来获取元数据。(I85bfa)- 添加了
InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent
,以便客户端可以确定表盘是否支持getPendingIntentForTouchEvent
。(I0b917) WatchFaceMetadataClient
和ListenableWatchFaceMetadataClient
不再是实验性的。它们可以用来有效地获取表盘元数据,在可能的情况下无需打开到表盘的绑定器。(Ibb827)- 添加了对同步复杂组件提供程序的支持,其中复杂组件的更新频率高于正常频率,在表盘可见且非环境模式下,每秒最多一次。要使用此功能,提供程序必须在其清单中包含一个新的
androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS
元数据标记,并覆盖onSynchronousComplicationRequest
。根据数据源的性质,它可能还需要覆盖onStartSynchronousComplicationRequests
和onStopInteractiveComplicationRequests
以获取复杂组件进入和退出交互模式的通知。(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
已重命名为addOnWatchFaceReadyListener
,removeWatchFaceReadyListener
已重命名为removeOnWatchFaceReadyListener
。( I48fea)- `EditorSession` 的
getComplicationsPreviewData
和getComplicationsDataSourceInfo
不再是挂起函数,而是值为最初为 null 的StateFlow<>
属性。在 `ListenableEditorSession` 中,getListenableComplicationPreviewData
和getListenableComplicationsProviderInfo
已被删除,取而代之的是基类中的新的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)