首页 > 其他分享 >如何快速开发一个健康助手,实时守护用户健康

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

时间:2022-08-19 10:34:49浏览次数:92  
标签:实时 Kit add Health DT 健康 data dataTypes 守护

随着人们生活水平的提高,大家对健康越来越重视和关注,用户在使用一些健康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 最新技术资讯~

标签:实时,Kit,add,Health,DT,健康,data,dataTypes,守护
From: https://www.cnblogs.com/hmscore/p/16601135.html

相关文章

  • 叮当守护如何下载?
    叮当守护是一款全新隐私保护神器,全方位保护您的个人隐私数据。它适用于安卓7.0+系统,苹果IOS系统不支持。 如何进行下载呢?它们没有明确的说明,在此留个地址,不迷路叮当守......
  • 手绘地图制作的关键点之“实时导航”
    接上文《手绘地图制作的关键点之“图层覆盖”》,继续来聊聊手绘地图另外一个关键点。那就是“实时导航”。作者:轻轻的烟雾(z281099678)之前在《景区手绘地图(电子地......
  • 【里程碑】牛X的一塌糊涂,不需要目标板额外做任何代码,实时检测RTOS的任务执行情况,支持
    H7-TOOL详细介绍:https://www.armbbs.cn/forum.php?mod=viewthread&tid=89934 【说明】这几天一直在思考如何方便的使用SWD接口实时分析RTOS任务执行情况的问题,今天终于......
  • winform开启线程实时输出日志到控件
    1、声明委托 publicdelegatevoidShowMessage2Form(stringmessage);2、声明事件staticpubliceventShowMessage2FormShowMessage;3、事件绑定LogHelper.ShowM......
  • 多线程.守护线程
    daemon守护线程分为用户线程和守护线程虚拟机必须确保用户线程执行完毕虚拟机不用等待守护线程执行完毕如,后台记录操作日志,监控内存,垃圾回收等待...package......
  • dm8 创建实时主备
    运行dbca.sh脚本初始化实例/u01/app/dm/tool/dbca.sh编辑dm.ini,主要修改以下参数INSTANCE_NAME=hh01PORT_NUM=5236#数据库实例监听端口DW_INA......
  • .net6 健康检查
    publicvoidConfigureServices(IServiceCollectionservices){services.AddControllersWithViews().Services......
  • Nodemon 如何实时监听 TypeScript 项目下的文件并热部署?
    首先你的项目要安装ts-node和nodemon:npmi-Dts-nodenodemon在package.json文件中配置运行脚本:"dev":"nodemon--watchsrc/**/*.ts--exec\\\"ts-node\\\"src/ma......
  • 1. 电商大数据实时数仓项目实战(Photo)
    1.电商大数据实时数仓项目实战(Photo)1.1框架版本选型1.2服务器选型1.3集群规模1.4人员配置参考1.5项目架构1.6实时数仓分层-ODS1.7实时数仓分层-D......
  • 实时数据仓库==(总结)
    实时数据仓库(总结)1.开源实时数仓和离线数仓的区别API计算引擎离线数据仓库主要使用hivesql和sparksql进行开发实时数据仓库主要是使用flinksql开发数据存储......