Skip to main content
版本:v3

快速上手

介绍

本文会通过一个完整的例子,演示如何创建,开发和测试 Zepp OS 运动扩展应用。

在正式开始前,先介绍一些相关背景:

信息
  • 「运动扩展」必须在 API_LEVEL 3.6 及以上的设备才可以使用
  • 「运动扩展」拥有大多数 JS API 的能力,但存在部分限制,详情请参考 API 限制
  • 「运动扩展」是独立的应用,拥有独立的 appId,需要在开发者后台完成创建,提交,审核流程后才可以在应用商店上线

快速起步

1. 环境准备

「运动扩展」的开发流程与 Zepp OS 小程序一致,所需的开发工具一致,请参考 环境准备 完成环境准备。

2. 创建项目

在创建项目的环节,我们直接使用 Zeus CLI 工具的 zeus create workout-sample 命令创建「运动扩展」模版项目,项目类型选择 WORKOUT_EXTENSION

备注

在执行命令之前请先使用 npm i @zeppos/zeus-cli -g 安装 Zeus CLI 的最新版本

3. 模拟器运行

此步骤流程与 Zepp OS 小程序一致,参考 模拟器运行 完成模拟器安装和模拟器运行。

使用终端进入到刚刚创建的「运动扩展」目录下,执行 zeus dev 编译预览命令,可以在模拟器中看到运动扩展应用。

信息

为方便开发者开发,运动扩展会在模拟器的应用列表中展示,真机则是需要在系统应用「运动」中添加预览(真机不会在应用列表中显示运动扩展应用)

4. 真机预览

此步骤流程与预览 Zepp OS 小程序一致,参考 真机预览

相关要点

「运动扩展」相关 API

  • DataWidget 构造函数
  • SPORT_DATA 控件
    • SPORT_DATA 控件是为「运动扩展」专门设计的 API,具有丰富的数据项展示类型,可以做到运动数据的实时展示
  • getSportData
    • getSportData 接口可以获取到运动应用的实时数据,开发者可以对数据进行处理与记录

app.json 配置

app.json 请参考 小程序配置

运动扩展的区别仅在 module 字段的配置,data-widget 代表运动扩展配置。

信息

「运动扩展」必须在 API_LEVEL 3.6 及以上的设备才可以使用,minVersion 需要配置为 3.6

widgets 字段为一个数组,目前最大长度为 1,即同一个 appId 的「运动扩展」应用中,最多可以同时存在 1 个「运动扩展」插件(后期可能会支持多个)。

"module": {
"data-widget":{
"widgets": [{
"path": "pages/plugin1",
"window": {
"isPinned": 1
},
"name": "plugin2",
"icon": "icon2.png",
"runtime": {
"ability": [{
"type": 1,
"subType": [1, 2, 3]
}]
}
}]
},
}
属性类型说明
typenumber目前只支持填写 1,代表「运动扩展」类型
subTypeArray<number>支持的运动类型,如果设置空数组 [] 代表支持所有运动类型,其余运动类型含义请参考文末 subType 运动类型

isPinned 字段控制顶部悬浮的电量和时间标记是否显示,0 显示,1 不显示,当设置其不显示时,运动扩展获得整个屏幕的绘图区域。

下图分别为圆形和方形屏幕手表开启运动时的界面,当设置 isPinned: 0,可以看到顶部悬浮的电量和时间栏。

480px 圆形屏幕下,悬浮栏的高度为 68px454 px 的圆形屏幕下,悬浮栏的高度进行等比例缩放 Math.ceil(454/480 * 68) = 64 px

390px 高度的方形屏幕下,悬浮栏的高度为 60px

生命周期

运动扩展与 Zepp OS 小程序生命周期 基本一致,新增了 onResumeonPause 生命周期。

在介绍生命周期之前,先引入一个概念,叫做「Pause」状态,在这个状态下应用的上下文信息会保留,但是无法响应注册的回调函数,注册的定时器会暂停。

在完成「运动扩展」插件的添加后,触发 app.jsonCreate 生命周期。

随后执行「运动扩展」的 onInitbuild 生命周期。之后 app.js 进入「Pause」状态,直到进入对应的「运动扩展」。

「运动扩展」有获得焦点的特性,即页面聚焦到「运动扩展」插件时,会触发 onResume 生命周期,当「运动扩展」失去焦点时触发 onPause 生命周期。

信息

当「运动扩展」插件失去焦点后,会进入「Pause」 状态。

API 限制

「运动扩展」在 UI 交互方面存在部分限制。

  • 绘制区域有限制,只可以在设备屏幕边界范围内绘制 UI 控件,如「运动扩展」在 Amazfit T-Rex Ultra 设备上的绘图区域大小与屏幕分辨率一致为 454 x 454 px。
  • 只能展示单页内容,不支持长页面滚动。
  • 不支持滑动操作。页面内不支持 SCROLL_LISTVIEW_CONTAINERPAGE_INDICATORSCROLL_BAR 等支持滑动或者堆叠布局的控件。
  • 不支持手势监听。
  • 不支持按键响应。
  • 支持 CLICK 事件。页面内控件支持点击事件。

运动扩展 i18n 配置

"i18n": {
"ar-EG": {
"data-widget": {
"widgets": [
{
"name": "Running Pace Master"
}
]
}
},
"ca-ES": {
"data-widget": {
"widgets": [
{
"name": "Running Pace Master"
}
]
}
},
}

完整示例

请看 Zepp Health Github 示例仓库 workout-extension

一共提供了三个示例,分别是

  • Running Data Assistant(上图左侧)
  • Running Pace Master(上图右侧)
  • Running Pace Master With Side Service(演示了伴生应用的使用)

附录

subType 运动类型值

subType运动类型
1户外跑
2跑步机(原室内跑)
3健走
4户外骑行
5自由训练
6泳池游泳
7公开水域游泳
8室内骑行
9椭圆机
10登山
11越野跑
12滑雪
15户外徒步
17网球
18足球
19铁人三项
20复合运动
21跳绳
23划船机
24室内健身
40室内步行
41冰壶
42单板滑雪
43高山滑雪
44户外滑冰
45室内滑冰
46越野滑雪
47山地骑行
48小轮车
49高强度间歇训练
50核心训练
51混合有氧
52力量训练
53拉伸
54爬楼机
55柔韧训练
57踏步训练
58踏步机
59体操
60瑜伽
61普拉提
62冲浪
63打猎
64钓鱼
65帆船运动
66户外划船
67滑板
68桨板冲浪
69轮滑
70攀岩
71芭蕾舞
72肚皮舞
73广场舞
74街舞
75交际舞
76舞蹈
77尊巴
78板球
79棒球
80保龄球
81壁球
82橄榄球
83高尔夫
84高尔夫挥杆
85篮球
86垒球
87门球
88排球
89乒乓球
90曲棍球
91手球
92羽毛球
93射箭
94马术运动
95剑术
96空手道
97拳击
98柔道
99摔跤
100太极
101泰拳
102跆拳道
103武术
104自由搏击
105双板滑雪
106风筝冲浪
108爬楼
109健身操
110定向越野
111团体操
112拉丁舞
113爵士舞
114搏击操
115呼啦圈
116飞盘
117飞镖
118放风筝
119拔河
120踢毽子
121沙滩足球
122沙滩排球
123漂流
124摩托艇
125雪车
126雪橇
127定向滑雪
128冬季两项
129跑酷
130交叉训练
131竞走
132驾车
133滑翔伞
134一分钟仰卧起坐
135一分钟跳绳
136雪地摩托
137越野摩托
138龙舟
139滑水
140皮划艇
141赛艇
142马球
143动感单车
144漫步机
145墙球
146民族舞
147柔术
148击剑
149单杠
150双杠
151台球
152藤球
153躲避球
154水球
155蹼泳
156花样游泳
157浮潜
158冰球
159秋千
160沙狐球
161桌上足球
162毽球
163体感游戏
164室内足球
165嘻哈舞
166钢管舞
167战绳
168霹雳舞
169沙包球
170地掷球
171回力球
172室内冲浪
173国际象棋
174国际跳棋
175围棋
176桥牌
177桌游
178雪鞋健行
179射击
180跳伞
181速降
182蹦极
183蹦床
184抱石
185现代舞
186迪斯科
187踢踏舞
188地板球
189电子竞技
190沙滩车
191足球(无 GPS)
192操场跑步
193钓鱼(钓鱼数量)
194室内攀岩
195登山滑雪
196户外自由潜水
197室内自由潜水
198渔猎
199简单网球
200尾波冲浪
201冲浪(识别趟数)
202风筝冲浪(识别滑翔)
203超级马拉松