简介

HiHealth 是华为开发的用于运动健康领域的一个开放平台, 三方APP可以借助HiHealth开放平台提供的运动健康数据开发自己专有的应用。

HiHealth Kit是提供给三方应用开发者使用的JAR包,用于和HiHealth平台的对接。

本Codelab提供了一个三方APP基础开发样例,用于完成室内跑步的功能。 华为运动健康APP连接了运动手表跑步机两个设备, 通过使用跑步机可以获取实时速度跑步距离跑步持续时长参数, 跑步机上有控制按钮,能够启动暂停停止跑步。 通过使用运动手表可以获取跑步过程中的实时心率数据。

开发者在这个样例中添加简单代码调用HiHealth KitAPI,就可以完成和HiHealth平台的对接, 从而实现室内跑步功能。

开发者完成相应代码的开发后,可以把自己开发的APP安装到手机上,然后戴上运动手表跑步机上亲自体验。

三方APP与HiHealth Kit的交互

跑步运动状态迁移图

必备能力

开发者参与本项目需要具备以下一些基础能力:

参赛流程

以开发者视角描述一下工作流程。

初始工程代码位于:

D:\Codelab\happysport.zip

解压到:

D:\Codelab\happysport

使用Android Studio打开happysport工程,编译生成apk文件,下载到手机看看运行结果,APP运行起来后用户界面显示如下:

拷贝D:\Codelab\HiHealthKit.jar到工程下的app\libs目录。

以下方法二选一

方法一

采用本地文件系统的依赖方式,在app\build.gradle文件的dependencies添加以下内容

implementation fileTree(dir: 'libs', include: ['*.jar'])

方法二

在Android Studio中找到菜单Tools/EMUI Kits/Kit Manager,

勾选Health框,再点击Confirm按钮。

可以发现导入成功

以下方法二选一

方法一

import类

在文件

app\src\main\java\com\huawei\Codelabs\hihealth\happysport\viewmodels\HiHealthKitAdapter\
HiHealthKitAdapter.java中import依赖的Class。

import com.huawei.hihealthkit.data.HiHealthKitConstant; import com.huawei.hihealthkit.data.store.HiHealthDataStore; import com.huawei.hihealthkit.data.store.HiSportDataCallback; import com.huawei.hihealthkit.error.HiHealthError;

注册回调

APP与HiHealth Kit之间采用异步回调的方式进行通讯,回调对象需要先注册到HiHealth Kit中。

在文件app\src\main\java\com\huawei\Codelabs\hihealth\happysport\viewmodels\HiHealthKitAdapter\
HiHealthKitAdapter.java中的public boolean registerSportListener(ISportListener listener)函数添加注册代码:

HiHealthDataStore.registerRealtimeSportCallback(mContext, new HiSportDataCallback() { @Override public void onResult(int result) { } @Override public void onDataChanged(int state, Bundle bundle) { } });

其中onResult用于控制链路的回调,例如,当注册成功、注册失败以运行过程中出现了异常都会调用此接口。 onDataChanged用于接收数据,state表示当前运动状态,bundle以key-value形式保存了当前的实时数据。

方法二

从Tools/EMUI Kits/Kit Assistant中拖拽HiHealth的实时跑步数据读取接口代码,

拖拽到编辑器当前文件app\src\main\java\com\huawei\Codelabs\hihealth\happysport\viewmodels\HiHealthKitAdapter\
HiHealthKitAdapter.java中的public boolean registerSportListener(ISportListener listener)函数中。

在public void onResult(int result)函数中补充

if (result == HiHealthError.SUCCESS) { mSportListener.onConnect(); return; } mSportListener.onDisconnect();

该状态值会体现在APP首页的链路状态。

在public void onDataChanged(int state, Bundle bundle)函数中添加以下代码片段, 第一个参数state代表当前运动状态,该状态值会体现在APP首页的运动状态。

switch (state) { case HiHealthKitConstant.SPORT_STATUS_STARTED: mSportListener.onStart(); break; case HiHealthKitConstant.SPORT_STATUS_PAUSED: mSportListener.onPause(); break; case HiHealthKitConstant.SPORT_STATUS_RESUMED: mSportListener.onResume(); break; case HiHealthKitConstant.SPORT_STATUS_STOPPED: mSportListener.onStop(); break; case HiHealthKitConstant.SPORT_STATUS_RUNNING: mSportListener.onRunning(); break; default: Log.e(Tag, "unsupported sport state"); return; }

在public void onDataChanged(int state, Bundle bundle)函数中紧接着上一节的内容添加以下代码片段, ,我们需要从第二个参数bundle解析出相关的运动数据。

RunningSportData data = new RunningSportData(0,0,0,0); data.distance = bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_DISTANCE); data.duration = bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_DURATION); data.heartRate = bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_HEARTRATE); int pace = bundle.getInt(HiHealthKitConstant.BUNDLE_KEY_PACE); if (pace != 0) { data.velocity = 1000000 /pace; } mSportListener.onRecvData(data);

编译

编译工程,解决掉一些简单编译错误。

测试

  1. 生成apk,把apk下载到手机里
  2. 启动运动健康APP
  3. 绑定手表,在运动健康APP的我的/我的设备/添加设备/手表/HUAWEI WATCH GT系列进行配对绑定。
  4. 接着启动自己刚刚开发的快乐运动APP,可以发现链路状态为CONNECTED
  5. 运动健康运动/跑步/室内跑步页面点击开始跑步,可以看见页面数据在变化。
  6. 切换到快乐运动APP,能够看见从运动健康同步过来的数据。
  1. 把编写的APK直接安装到手机作为作品提交。
  2. 清理电脑上的工作区,方便接下来的开发者使用。

效果展示如图

干得好!至此你已经成功完成了本Codelab的预定目标,并学到了:

  1. 如何使用华为运动健康的HiHealth Kit进行接入。
  2. 如何使用AndroidStudio的EMUI Kit插件进行API代码原型的插入。
  3. 如何使用HiHealth Kit获取实时运动数据。

本Codelab中所用demo源码下载地址如下:

源码下载

已复制代码