写点什么

如何快速开发一个健康助手,实时守护用户健康

作者:HMS Core
  • 2022 年 8 月 19 日
    上海
  • 本文字数:2893 字

    阅读完需:约 9 分钟

随着人们生活水平的提高,大家对健康越来越重视和关注,用户在使用一些健康 App 时不仅想知道身高体重等基础情况,还想了解一些关于心率、血氧等日常数据,方便随时关注自身健康状况。这时候就需要 App 每天关注健康数据并且记录下来,如日常饮食、睡眠习惯,心率、血压血糖变化和运动数据等,并且建立一份个人健康档案,查看一段时间内如一周、一个月的健康数据变化趋势,第一时间关注异常数据,从而及时就医或者调整生活习惯。如此一来,用户便可以更好地掌控自己的健康状况,医生也可以更准确地诊断。


那么对于健康 App 来说,如何实现以上功能呢?华为运动健康服务(Health Kit)为开发者开放基础能力。通过集成 Health Kit 基础能力,您可以快速为 App 构建基础功能,如读取、插入、删除、更新一日或多日健康记录,为用户带来优质体验。


开发者应用通过接入 Health Kit基础能力服务,在用户授权后,即可获取华为运动健康 App 上用户的云侧健康数据,并在应用上展示给用户。

效果示例


此 Demo 在运动健康服务基础能力服务示例代码基础上进行修改,感兴趣的开发者可自行下载体验优化。

开发准备

  1. 注册帐号及申请帐号服务:因 Health Kit 服务需要用到帐号服务的能力,需先申请华为帐号服务后才能申请 Health Kit 服务。

  2. 申请Health Kit服务:申请产品所需的数据读写权限。在开发服务中找到并申请 Health Kit 服务。勾选产品需要申请的数据权限,这里我们需要申请的身高、体重属于非受限数据,提交申请后会快速审核通过,心率、血压、血糖、血氧饱和度属于受限数据,需要经过人工审核。



  1. 集成HMS Core SDK:在开发应用前,需要将 Health Kit 扩展服务能力的 SDK 集成到开发环境中。


使用 Android Studio 打开项目工程,找到并打开项目工程根路径下的 build.gradle 文件。在“allprojects > repositories”和“buildscript > repositories”里面增加 SDK 的 maven 仓地址。


maven {url 'https://developer.huawei.com/repo/'}
复制代码


打开 app 下应用级的 build.gradle 文件,在“dependencies”中添加如下编译依赖。


implementation 'com.huawei.hms:health:{version}'
复制代码


重新打开修改完的 build.gradle 文件,右上方出现 Sync Now 链接。点击“Sync Now”等待同步完成。


  1. 配置混淆脚本:编译 APK 前需要配置混淆配置文件,避免混淆 HMS Core SDK 导致功能异常。


在应用级根目录下打开混淆配置文件“proguard-rules.pro”,加入排除 HMS Core SDK 的混淆配置脚本。


-ignorewarnings-keepattributes *Annotation*-keepattributes Exceptions-keepattributes InnerClasses-keepattributes Signature-keepattributes SourceFile,LineNumberTable-keep class com.huawei.hianalytics.**{*;}-keep class com.huawei.updatesdk.**{*;}-keep class com.huawei.hms.**{*;}
复制代码


  1. 导入证书指纹、修改包名、配置JDK编译版本:根据“创建应用的Keystore文件”指南,生成 Keystore 文件并导入到应用中,导入后,打开应用级的“build.gradle”文件,可以看到导入的结果。



修改应用包名,应用包名应与“申请帐号服务”中填写的包名保持一致。打开 App 下应用级根目录的“build.gradle”文件,在“android”中新增 compileOptions 配置,配置格式如下:


compileOptions {    sourceCompatibility = '1.8'    targetCompatibility = '1.8'}
复制代码

主要实现代码

  1. 拉起登录页面进行登录授权。


/** * Add scopes to apply for and obtains the authorization process Intent. */private void requestAuth() {    // Add scopes to apply for. The following only shows an example.    // Developers need to add scopes according to their specific needs.    String[] allScopes = Scopes.getAllScopes();    // Obtains the authorization process Intent.    // True indicates that the health app authorization process is enabled. False indicates disabled.    Intent intent = mSettingController.requestAuthorizationIntent(allScopes, true);
// The authorization process page is displayed. startActivityForResult(intent, REQUEST_AUTH);}
复制代码


  1. 调用 com.huawei.hms.hihealth. DataController 类的 readLatestData() 接口,读取健康相关的最新数据。包括用户的身高、体重、心率、血压、血糖和血氧。


/** * read the latest data basing on data type * * @param view (indicating a UI object) */public void readLatestData(View view) {    // 1. Use the specified data type (DT_INSTANTANEOUS_HEIGHT) to call the data controller to query    // the latest data of this data type.    List<DataType> dataTypes = new ArrayList<>();    dataTypes.add(DataType.DT_INSTANTANEOUS_HEIGHT);    dataTypes.add(DataType.DT_INSTANTANEOUS_BODY_WEIGHT);    dataTypes.add(DataType.DT_INSTANTANEOUS_HEART_RATE);    dataTypes.add(DataType.DT_INSTANTANEOUS_STRESS);    dataTypes.add(HealthDataTypes.DT_INSTANTANEOUS_BLOOD_PRESSURE);    dataTypes.add(HealthDataTypes.DT_INSTANTANEOUS_BLOOD_GLUCOSE);    dataTypes.add(HealthDataTypes.DT_INSTANTANEOUS_SPO2);    Task<Map<DataType, SamplePoint>> readLatestDatas = dataController.readLatestData(dataTypes);
// 2. Calling the data controller to query the latest data is an asynchronous operation. // Therefore, a listener needs to be registered to monitor whether the data query is successful or not. readLatestDatas.addOnSuccessListener(new OnSuccessListener<Map<DataType, SamplePoint>>() { @Override public void onSuccess(Map<DataType, SamplePoint> samplePointMap) { logger("Success read latest data from HMS core"); if (samplePointMap != null) { for (DataType dataType : dataTypes) { if (samplePointMap.containsKey(dataType)) { showSamplePoint(samplePointMap.get(dataType)); handleData(dataType); } else { logger("The DataType " + dataType.getName() + " has no latest data"); } } } } }); readLatestDatas.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { String errorCode = e.getMessage(); String errorMsg = HiHealthStatusCodes.getStatusCodeMessage(Integer.parseInt(errorCode)); logger(errorCode + ": " + errorMsg); } });}
复制代码


其中的 DataType 对象包含具体的数据类型,和数据的值,进行解析即可拿到对应的数据。


了解更多详情>>


访问华为开发者联盟官网


获取开发指导文档


华为移动服务开源仓库地址:GitHubGitee


关注我们,第一时间了解 HMS Core 最新技术资讯~

发布于: 刚刚阅读数: 3
用户头像

HMS Core

关注

HMS Core技术团队。 2022.06.16 加入

分享最新的技术干货,带来最全的能力应用场景,更新热门开发者圈子活动。与开发者一起,同成长,共精彩。

评论

发布
暂无评论
如何快速开发一个健康助手,实时守护用户健康_HMS Core_InfoQ写作社区