1. 介绍
简介
华为运动健康服务(HUAWEI Health Kit)是华为提供的运动健康数据开放服务, 构建的是一个开放的运动健康生态数据平台(后面统称生态数据平台)。
生态数据平台作为用户运动健康数据的管理者,遵循华为网络安全与用户隐私保护规范,确保用户数据安全,完整,准确。
开发者通过集成华为运动健康服务,接入华为生态数据平台。
生态数据平台提供给开发者写入用户运动健康数据的接口,开发者通过调用写入数据的接口将用户的运动健康数据导入到生态数据平台。同时生态数据平台提供了丰富的数据查询接口,开发者通过调用查询接口可以跨平台、跨应用获取到用户导入的运动健康数据。
生态数据平台只对用户授权导入的运动健康数据进行管理,并提供丰富的跨平台、跨应用查询接口。

开发者通过在APP中集成HUAWEI Health SDK调用HUAWEI Health Kit接口向生态数据平台写入用户的运动健康数据。
为此,开发者需要:
- 在开发者联盟注册开发者帐号,并在开发者管理台上创建应用以及配置应用信息和申请Health Kit服务。
- 使用Android Studio IDE创建Project,并配置接入HUAWEI Health依赖的SDK。
- 根据HUAWEI Health开发指南,实现华为Health开放服务的API调用以及调试。
您将建立什么
本codelab提供了一个三方应用基础开发样例,开发者只需要完成相应的代码片段补充,就可以实现实时计步的功能开发。该功能会在UI界面上呈现出实时计步曲线、步频、总步数以及卡路里信息。

您将会学到什么
- 如何对接HUAWEI Health Kit的开放能力。
- 如何读取传感器的实时数据。
2. 您需要什么
硬件要求
- 开发计算机(台式机或笔记本电脑),运行Windows 7及以上版本的操作系统。
- 华为手机(带USB线),用于真机调试开发。
软件要求
- JDK 1.8及以上。
- Android API 15及以上。
- 华为手机EMUI 8.1及以上,手机上装有HMS Core(APK)4.0.2.300及以上版本。
- 非华为手机不支持。
需要的知识点
- Android应用程序开发(了解基本概念即可,能写出hello world应用)。
- Android Studio使用(需要了解编译、生成APK、安装APK、调试)。
- Java程序开发(了解简单语法即可)。
3. 能力接入准备
集成HUAWEI HMS Core能力,需要完成以下准备工作:
- 创建AGC应用
- 创建Android Studio工程
- 生成签名证书
- 生成签名证书指纹
- 配置签名证书指纹
- 添加应用包名并保存配置文件
- 配置Maven仓地址以及配置接入HUAWEI Health依赖的SDK。
- 在Android Studio配置签名文件
具体操作,请按照《HUAWEI HMS Core集成准备》中详细说明来完成。
4. 申请 Health Kit 服务
在集成HUAWEI HMS Core能力后,还需要申请 Health Kit 服务,具体需要完成以下准备工作:
- 在开发服务中找到"Health Kit"服务,并申请Health Kit服务。
- 勾选产品必须申请的数据授权,并提交数据权限申请。
- 邮件的形式反馈申请信息,非受限数据类的申请一般需要等待1-2个工作日即可收到回复。
- Health Kit 服务申请通过。
具体操作,请按照《申请 Health Kit 服务》中详细说明来完成。
5. 集成 SDK
开发环境
Android Studio开发环境,建议版本v3.3.2及以上。
配置SDK的maven仓地址
- 使用Android Studio打开项目工程,找到并打开项目工程根路径下的build.gradle文件。

- 在"allprojects –> repositories"里面增加SDK的maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
- 在"buildscript –> repositories"里面增加SDK的maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}

添加编译依赖
- 打开app下应用级的build.gradle文件

- 在"dependencies"中添加如下编译依赖。
implementation 'com.huawei.hms:hihealth-base:{version}' - 重新打开修改完的build.gradle文件,右上方出现Sync Now链接。点击"Sync Now"等待同步完成。


6. 配置 AndroidManifest.xml
- 打开AndroidManifest.xml文件

- 在"application"中添加开发者联盟创建应用时生成的APPID信息。value的APPID,请使用"申请帐号服务"过程中创建产品生成的APPID。
<meta-data android:name="com.huawei.hms.client.appid" android:value="APP ID"/>

7. 修改applicationId
- 打开app下应用级的build.gradle文件

- 在" android " -> "defaultConfig"中,将applicationId修改成在申请帐号服务时使用的应用包名。可以参考:申请帐号服务

8. 完成APP签名
- 拷贝在"能力接入准备"步骤中生成的签名文件(如happysport.jks)到health_keystore目录下,如下图所示:

- 在app目录下的build.gradle文件里的TODO: signingConfigs位置添加签名文件的相关配置信息:
signingConfigs { debug { storeFile file('health_keystore/happysport.jks') keyAlias '***' storePassword '***' keyPassword '***' } release { storeFile file('health_keystore/happysport.jks') keyAlias '***' storePassword '***' keyPassword '***' } } - 其中storeFile file填写签名文件在工程中的位置;keyAlias、storePassword和keyPassword都是生成签名文件时配置的,需要根据自己的实际情况进行配置。
9. Demo 开发
整个代码工程以及资源结构如下图:
1. 运行初始工程(下载原始框架代码)
- 把初始工程解压到D:\codelab\happysport下。
- 使用Android Studio打开happysport工程,编译生成APK文件,下载到手机看看运行结果,App运行起来后用户界面显示如下所示:

2.添加登录代码
- 在app\src\main\java\com\huawei\codelabs\hihealth\happysport\utils\HiHealthSetup.java文件里的TODO: login位置添加登录代码片段:
List<Scope> list = new ArrayList<>(); list.add(HuaweiIdAuthAPIManager.HUAWEIID_BASE_SCOPE); HuaweiIdAuthParamsHelper authParamsHelper = new HuaweiIdAuthParamsHelper(); HuaweiIdAuthParams authParams = authParamsHelper.setIdToken().setScopeList(list).createParams(); nHuaweiIdAuthService = HuaweiIdAuthManager.getService(activity.getApplicationContext(), authParams); mAccount = HuaweiIdAuthManager.getAuthResult(); if (mAccount == null) { Intent signInIntent = nHuaweiIdAuthService.getSignInIntent(); activity.startActivityForResult(signInIntent, REQUEST_CODE_LOGIN); } if (mAccount != null) { viewModel.onConnect(); } - 此处代码会先检查是否已登录,如果未登录则会触发登录过程弹框让用户确认。
3.请求用户授权
- 在app\src\main\java\com\huawei\codelabs\hihealth\happysport\utils\HiHealthSetup.java文件里的TODO: authorization位置添加请求授权代码片段:
String[] maxScopes = Scopes.getMaxScopes(); Scope[] allRequiredScopes = new Scope[maxScopes.length]; for (int i = 0; i < allRequiredScopes.length; i++) { allRequiredScopes[i] = new Scope(maxScopes[i]); } List<Scope> scopeList = new ArrayList<>(); Collections.addAll(scopeList, allRequiredScopes); HuaweiIdAuthManager.addAuthScopes(mActivity, REQUEST_CODE_PERMISSION, scopeList); - 此处请求了全部的授权,用于演示时看见全部权限集。
4.注册实时数据侦听
- 在app\src\main\java\com\huawei\codelabs\hihealth\happysport\viewmodels\HiHealthBaseAdapter\
HiHealthBaseAdapter.java文件里的TODO: client位置添加client实例化代码片段:HiHealthOptions options = HiHealthOptions.builder().build(); AuthHuaweiId hwId = HuaweiIdAuthManager.getExtendedAuthResult(options); mSensorsController = HuaweiHiHealth.getSensorsController(mContext, hwId); - 在app\src\main\java\com\huawei\codelabs\hihealth\happysport\viewmodels\HiHealthBaseAdapter\
HiHealthBaseAdapter.java文件里的TODO: start位置添加注册侦听代码片段:DataCollector dataCollector = new DataCollector.Builder() .setDataType(DataType.DT_CONTINUOUS_STEPS_TOTAL) .setDataGenerateType(DataCollector.DATA_TYPE_RAW) .setPackageName(this.mContext) .setDeviceInfo(new DeviceInfo("hw", "hw", "hw", 0)) .build(); mSensorsController.register(new SensorOptions.Builder() .setDataType(DataType.DT_CONTINUOUS_STEPS_TOTAL) .setDataCollector(dataCollector) .build(), mListener); - 该代码片段会侦听手机上的计步传感器的数据并通过mListener回调。
5.读取实时数据
- 在app\src\main\java\com\huawei\codelabs\hihealth\happysport\viewmodels\HiHealthBaseAdapter\
HiHealthBaseAdapter.java文件里的TODO: listener位置初始化侦听对象,把之前的默认初始化给注释掉。//private OnSamplePointListener mListener = null; private OnSamplePointListener mListener = new OnSamplePointListener() { @Override public void onSamplePoint(SamplePoint samplePoint) { Log.d(TAG, "on sample point received"); processSamplePoint(this, samplePoint); } }; - 实时数据会通过onDataPoint方法回调。
6.关闭实时数据侦听
- 在app\src\main\java\com\huawei\codelabs\hihealth\happysport\viewmodels\HiHealthBaseAdapter\
HiHealthBaseAdapter.java文件里的TODO: stop位置去注册侦听对象:mSensorsController.unregister(mListener);
10. 体验运行效果
- 编译生成APK,把APK安装到手机里。
- 打开刚安装的快乐运动App。
- 首次运行会弹出登录框,点击授权并登录。


注意:权限选择项默认不勾选,用户根据所需场景自主选择权限。
- 首次运行会弹出HiHealthKit的授权框,点击授权。

- 点击开始按钮读取实时计步数据。
- 晃动手机产生计步数据。
- UI界面会呈现实时计步曲线、步频、总步数以及卡路里信息。
- 点击停止按钮停止读取实时计步数据。
11. 恭喜你
干得好!至此你已经成功完成了本codelab的预定目标,并学到了:
- 如何对接HUAWEI Health Kit的开放能力。
- 如何读取传感器实时数据。
剩余