Complication 支持哪些数据类型?如何选择合适的数据源?

解读

在国内 Wear OS 面试中,Complication 是表盘与数据提供方(ComplicationDataSourceService)之间的“数据插座”。面试官想确认两点:

  1. 你是否把 Complication 当成“万能 View”——能塞什么、不能塞什么;
  2. 面对国内“无 GMS、有厂商服务”的现实,你能否在“系统预置、厂商 SDK、自研后台”三条路里选出最省电、最合规、最好维护的方案。
    答得太浅(只说“int、string”)会被追问细节;答得太深(把 Wear 4 的 ProtoLayout 也搬出来)容易刹不住车。用“官方七大类型 + 国内三选一策略”最稳。

知识点

  1. ComplicationData 的七大静态类型(Wear 3.x 仍为主力,国内华为、小米、OPPO 均兼容):
    SHORT_TEXT、LONG_TEXT、RANGED_VALUE、MONOCHROMATIC_IMAGE、SMALL_IMAGE、LARGE_IMAGE、EMPTY。
  2. 每种类型携带的必填/选填字段:
    ShortTextComplicationData.Builder 必须 setText(ComplicationText),可选 setTitle、setIcon、setContentDescription;
    RangedValueComplicationData 必须 setValue/setMin/setMax,可选 setTargetValue、setColorRamp;
    图片类必须 setMonochromaticImage/setSmallImage,同时注意 setImageStyle(ICON/PHOTO) 决定圆角/遮罩。
  3. 国内无 GMS 时的数据源优先级:
    ① 系统预置(心率、步数、电池)→ 直接 SafeWatchFaceComplicationDataSourcePolicy 读取,零耗电;
    ② 厂商 SDK(华为 Health Kit、小米运动健康 SDK)→ 需申请运动健康权限,后台拉活靠厂商 Push,合规但需上架审核;
    ③ 自建后台 → 用 WorkManager + 传感器或网络轮询,必须做电量与链式启动管控,否则国内 ROM 会直接杀后台。
  4. 选型三步:
    Step1 看数据实时性——秒级刷新用系统或厂商通道,分钟级可用 WorkManager 15 min 周期;
    Step2 看表盘形状——圆形 260 px 表盘优先 SHORT_TEXT+MONOCHROMATIC_IMAGE,避免 LARGE_IMAGE 被裁切;
    Step3 看隐私合规——心率、血氧属于“个人敏感信息”,需双清单 + 弹窗授权,否则应用市场驳回。

答案

“Complication 在 Wear 3.x 官方层面支持七大类型:SHORT_TEXT、LONG_TEXT、RANGED_VALUE、MONOCHROMATIC_IMAGE、SMALL_IMAGE、LARGE_IMAGE 与 EMPTY。
选型时,我先把需求拆成‘数据维度 + 刷新频率 + 合规风险’三张表:

  1. 如果是心率、步数、电池,直接读系统 ComplicationDataSourceService,不走自己后台,省电且兼容所有国内 ROM;
  2. 需要自家业务数据(例如股票、天气),优先看厂商是否开放 SDK:华为 Health Kit、小米运动健康都提供了 Complication 接口,SDK 内部用厂商 Push 通道,刷新频率 5~30 min,合规审核一次过;
  3. 厂商不支持的字段,再退到自研 WorkManager,周期 ≥15 min,同时把 setUpdateRequestKeys 设成 REQUIRES_NETWORK_NOT_ROAMING,避免后台链式启动被系统拦截。
    最后根据表盘预留槽位大小决定类型:圆形 260 px 槽位用 SHORT_TEXT+MONOCHROMATIC_IMAGE,方形 300 px 可用 RANGED_VALUE 配进度条;图片类一定给 setImageStyle(ICON) 让表盘做遮罩,防止圆角裁切。这样选型后,实测一夜耗电 <1%,国内主流市场审核无驳回。”

拓展思考

  1. Wear 4 引入 ProtoLayout Complication 动态模板,可把 ConstraintLayout 直接序列化进 TimelineEntry,国内厂商尚未全量适配,面试时可提“技术预研”但强调“线上仍用静态类型保兼容”。
  2. 折叠屏手表(华为 Watch 4 Pro 双形态)展开后槽位变大,可监听 androidx.wear.watchface.complication.rendering.ComplicationSlotBounds 变化,动态把 SHORT_TEXT 升级成 LONG_TEXT,体现“响应式布局”思维。
  3. 国内隐私新规要求“个人敏感信息需存储在境内”,若用自研后台,必须在 ComplicationDataSourceService 里把心率明文改成区间化脱敏值(如 70~80),否则工信部抽检会被认定“超范围收集”。