关于android:如何快速开发一个健康助手实时守护用户健康

44次阅读

共计 4016 个字符,预计需要花费 11 分钟才能阅读完成。

随着人们生存程度的进步,大家对衰弱越来越器重和关注,用户在应用一些衰弱 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 对象蕴含具体的数据类型,和数据的值,进行解析即可拿到对应的数据。

理解更多详情 >>

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

正文完
 0