You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AndroidX Wear OS表盘无法设置自定义默认Complication数据源

自定义Wear OS表盘无法设置同应用默认Complication的问题

问题概述

我无法在同应用同包的自定义Wear OS表盘上设置自己的默认Complication。目前已通过DefaultComplicationDataSourcePolicy在ComplicationSlotManager中完成配置,备用数据源(步数计数)可正常工作,打印的ComponentName日志也无误。根据文档提示的三类可能原因,前两类已排除:

  • 可手动添加Complication,排除「Complication未安装」问题
  • Complication支持请求的类型,排除「Complication不支持请求类型」问题
    已在Manifest中配置安全表盘相关权限,怀疑是否还有其他遗漏配置?当前使用的是新的AndroidX Wear OS库,相关文档较少,旧的android.support.wearable库方案已废弃。

1. ComplicationSlotManager配置代码(Kotlin)

sealed class ComplicationConfig(val id: Int, val supportedTypes: List<ComplicationType>) {
    object Left : ComplicationConfig(
        LEFT_COMPLICATION_ID,
        listOf(
            ComplicationType.SMALL_IMAGE,
            ComplicationType.SHORT_TEXT
        )
    )

   ...
}

// Utility function that initializes default complication slots (left and right).
fun createComplicationSlotManager(
    context: Context,
    currentUserStyleRepository: CurrentUserStyleRepository,
    drawableId: Int = DEFAULT_COMPLICATION_STYLE_DRAWABLE_ID
): ComplicationSlotsManager {
    val defaultCanvasComplicationFactory =
        CanvasComplicationFactory { watchState, listener ->
            CanvasComplicationDrawable(
                ComplicationDrawable.getDrawable(context, drawableId)!!,
                watchState,
                listener
            )
        }

    val protectionComplicationComponentName = ComponentName(
        context,
        ProtectionStatusComplicationService::class.java
    )

    Log.d("ComplicationUtils",protectionComplicationComponentName.flattenToString())

    ...

    val leftComplication = ComplicationSlot.createRoundRectComplicationSlotBuilder(
        id = ComplicationConfig.Left.id,
        canvasComplicationFactory = defaultCanvasComplicationFactory,
        supportedTypes = ComplicationConfig.Left.supportedTypes,
        defaultDataSourcePolicy = DefaultComplicationDataSourcePolicy(
            protectionComplicationComponentName,
            ComplicationType.SMALL_IMAGE,
            SystemDataSources.DATA_SOURCE_STEP_COUNT,
            ComplicationType.SHORT_TEXT
        ),
        bounds = ComplicationSlotBounds(
            RectF(
                LEFT_COMPLICATION_LEFT_BOUND,
                LEFT_AND_RIGHT_COMPLICATIONS_TOP_BOUND,
                LEFT_COMPLICATION_RIGHT_BOUND,
                LEFT_AND_RIGHT_COMPLICATIONS_BOTTOM_BOUND
            )
        )
    ).build()

    ...

    return ComplicationSlotsManager(
        listOf(leftComplication, rightComplication,topComplication,bottomComplication),
        currentUserStyleRepository
    )
}

2. Manifest配置代码(XML)

<!-- Required to act as a custom watch face. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />

<!-- Required for complications to receive complication data and open the provider chooser. -->
<uses-permission android:name="com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA" />
<uses-permission android:name="com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA_PRIVILEGED" />

...

<application

    ...

    <service
            android:name=".complications.ProtectionStatusComplicationService"
            android:exported="true"
            android:icon="@drawable/shield_black_24dp"
            android:label="Protection complication"
            android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
            <intent-filter>
                <action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST" />
            </intent-filter>

            <meta-data
                android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
                android:value="300" />

            <meta-data
                android:name="android.support.wearable.complications.SAFE_WATCH_FACES"
                android:value="com.waryme.wearos/com.waryme.wearos.watchface.WaryMeWatchFaceService"/>

            <meta-data
                android:name="android.support.wearable.complications.SUPPORTED_TYPES"
                android:value="SMALL_IMAGE" />
    </service>

    ...

</application>

已确认信息

  • 步数计数作为备用数据源可正常工作
  • protectionComplicationComponentName.flattenToString()输出结果正确
  • 已通过SAFE_WATCH_FACES元数据将表盘标记为安全表盘

内容的提问来源于stack exchange,提问作者AntoineJonard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:54:22