更新记录

1.0.11(2025-12-02)

  1. ios增加获取授权状态接口authorizationStatus

1.0.10(2025-10-29)

  1. 增加iOS数据类型:HRV心率变异性

1.0.9(2025-10-21)

  1. 增加华为和鸿蒙的支持
查看更多

平台兼容性

uni-app(4.07)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.07)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - -

其他

多语言 暗黑模式 宽屏模式

增删查手机系统健康数据如步数、跑步距离、身高、血糖、活动能量、心率、血压等等

ios配置

  1. 拷贝demo里的nativeResources、Info.plist文件到项目根目录
  2. 苹果网站创建Identifiers后,点击进入到详情,勾选Capabilities下的HealthKit,重新生成签名文件

华为配置

  1. 申请账号服务,需要绑定包名和签名的SHA256,记录下appid
  2. 申请Health Service Kit服务
  3. 拷贝demo里的AndroidManifest.xml文件到项目根目录,将里面com.huawei.hms.client.appid对应的value值改为上面的appid

鸿蒙配置

  1. 申请运动健康服务
  2. 配置Client ID
  3. 拷贝demo里的harmony-configs文件夹到项目根目录,如果项目已经有modules.json5,参考demo在里面增***tadata和querySchemes这两个配置,将client_id替换为上面申请到值

集成步骤

  1. 集成插件,集成插件步骤请参考 https://www.cnblogs.com/wenrisheng/p/18323027

接口

import {
    UTSHealth
} from "@/uni_modules/wrs-uts-health"
let health = new UTSHealth()

ios接口

  • 请求权限

let types = [
    "stepCount",
    "distanceWalkingRunning",
    "heartRate",
    "bloodPressureSystolic",
    "bloodPressureDiastolic",
    "bodyFatPercentage",
    "bodyMass",
    "bodyMassIndex", 
    "height",
    "leanBodyMass",
    "activeEnergyBurned",
    "basalEnergyBurned",
    "distanceCycling",  
    "sleepAnalysis",
    "bodyTemperature",
    "oxygenSaturation",
    "bloodGlucose",
    "walkingStepLength"
]
let params = {}
params.readTypes = types // 读权限
params.writeTypes = types // 写权限
health.requestAuthorization(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
    let flag = resp.flag
    if (!flag) {
        console.log(JSON.stringify(resp))
    }
})
  • 获取授权状态

let params = {}
params.type = "stepCount"
let status = health.authorizationStatus(params)
switch (status) {
    case 0:
        console.log("没有监测到权限")
        break;
    case 1:
        console.log("权限被拒绝")
        break;
    case 2:
        console.log("权限已授予")
        break;
    default:
        break;
}
  • 获取健康数据

let sampleQuery = true // true: 查询详细数据  false:查询总和
let params = {}
params.type = "stepCount" // type类型,见下面type说明
params.sampleQuery = sampleQuery 
// params.startDay = "2024-10-02 00:00:00" // 可选参数,开始时间
// params.endDay = "2024-10-02 23:59:59" // 可选参数,结束时间
health.executeQuery(params, (resp) => {
    if(sampleQuery) {
        //  {"flag":true,"data":[{"uuid":"A4A071C8-0530-46A5-95D5-15DD03F7F761","endDate":1750070700,"type":"HKQuantityTypeIdentifierStepCount","sourceBundleIdentifier":"com.apple.Health","sourceName":"健康","startDate":1750070700,"unit":"count","quantity":50}]}
        let dataArray = resp.data
        if(dataArray) { // 数组

        }
    } else {
        // {"sumQuantity":414349.9705362814,"flag":true}
        let sumQuantity = resp.sumQuantity
        if(sumQuantity) {
            this.showMsg("步数:" + sumQuantity)
        } else {
            this.showMsg(JSON.stringify(resp))
        }
    }
})

返回数据字段说明

  • uuid: 数据的ID
  • startDate: 开始时间,时间戳
  • endDate: 结束时间,时间戳
  • sourceName: 数据来源名称
  • sourceBundleIdentifier:来源标识
  • quantity: 指标值
  • unit:指标单位
  • categoryType:指标类型

  • 多指标项同时查询

let types = []
types.push({
    sampleQuery: true,
    type: "stepCount",
    // startDay: "2025-06-15 00:00:00",
    // endDay: "2025-06-16 23:59:59"
})
types.push({
    sampleQuery: true,
    type: "heartRate"
})
let params = {}
params.types = types

health.executeBatchQuery(params, (resp)=>{

    // {
    //  "dataList": [{
    //      "type": "stepCount",
    //      "data": [{
    //          "uuid": "A4A071C8-0530-46A5-95D5-15DD03F7F761",
    //          "endDate": 1750070700,
    //          "count": 50,
    //          "type": "HKQuantityTypeIdentifierStepCount",
    //          "sourceBundleIdentifier": "com.apple.Health",
    //          "sourceName": "健康",
    //          "startDate": 1750070700,
    //          "unit": "count",
    //          "quantity": 50
    //      }]
    //  }, {
    //      "type": "heartRate",
    //      "data": [{
    //          "uuid": "DCCD2AB0-CD40-47E8-AA58-91FA2C53748D",
    //          "endDate": 1750071600,
    //          "count": 200,
    //          "type": "HKQuantityTypeIdentifierHeartRate",
    //          "sourceBundleIdentifier": "com.apple.Health",
    //          "sourceName": "健康",
    //          "startDate": 1750071600,
    //          "unit": "count/min",
    //          "quantity": 200
    //      }]
    //  }]
    // }
    this.showMsg(JSON.stringify(resp))
})
  • 插入健康数据

let params = {}
params.dataArray = [
    {
        type: "stepCount", // type见下面说明
        quantity: 100, // 步数
        startDay:"2025-06-15 00:00:00",
        endDay: "2025-06-15 00:00:00"
    }
]
health.executeSave(params, (resp)=>{
    this.showMsg(JSON.stringify(resp))
    let flag = resp.flag
    if (!flag) {
        console.log("保存失败:" + JSON.stringify(resp))
    }
})
  • 删除健康数据

let params = {}
params.type = "stepCount"   // type见下面说明
params.startDay = "2025-06-15 00:00:00"
params.endDay = "2025-06-16 23:59:59"
health.executeDelete(params, (resp)=>{
    this.showMsg(JSON.stringify(resp))
    let flag = resp.flag
    if (!flag) {
        console.log("删除失败:" + JSON.stringify(resp))
    }
})

type类型

  • stepCount: 步数

  • distanceWalkingRunning: 步行+跑步距离(单位公里)

  • height: 身高

  • activeEnergyBurned: 活动能量

  • basalEnergyBurned: 静息能量

  • distanceCycling: 骑车距离

  • heartRate: 心率

  • restingHeartRate: 静息心率

  • respiratoryRate: 呼吸频率

  • bloodPressureSystolic: 收缩压

  • bloodPressureDiastolic: 舒张压

  • bodyFatPercentage:体脂率

  • bodyMass:体重

  • leanBodyMass:去脂体重

  • bodyMassIndex:身高体重指数BMI

  • activeEnergyBurned:活动能量

  • basalEnergyBurned: 静息能量

  • distanceCycling:骑车距离

  • sleepAnalysis: 睡眠,结束时间减去开始时间就是睡眠时长 睡眠类型返回的categoryType是指睡眠类型: 0: inBed 卧床时间 1: asleepUnspecified 睡眠 2: awake 清醒时间 3: asleepCore 核心睡眠 4: asleepDeep 深度睡眠 5: asleepREM 快速动眼睡眠

  • bodyTemperature:体温

  • oxygenSaturation:血氧

  • bloodGlucose:血糖

  • walkingStepLength: 步行步长

  • appleExerciseTime:苹果锻炼时间

  • vo2Max:最大摄氧量

  • heartRateVariabilitySDNN: HRV心率变异性

华为接口,目前仅支持【管理运动健康采样数据】,如需其他模块数据(管理锻炼记录、管理健康记录),请进入交流群私聊作者

  • 判断当前手机是否是华为手机

let manufacturer = UTSHealth.getManufacturer().toLowerCase()
let isHuawei = true
if (manufacturer.includes("huawei")) {
    isHuawei = true
} else {
    isHuawei = false
}
  • 监听健康服务到授权状态

health.onSetCallback((resp) => {
    let opt = resp.opt
    switch (opt) {
        case "OnSuccessListener": {
            let suc = resp.suc
            if (suc) {
                this.showMsg("健康服务授权成功")
            } else {
                this.showMsg("健康服务授权失败")
            }
        }
        break;
        case "OnFailureListener": {
            this.showMsg("健康服务授权失败")
        }
        break;
        default:
            break;
    }
})
  • 请求健康服务到权限

let types = [
    "HEALTHKIT_STEP_READ",
    "HEALTHKIT_STEP_WRITE",
    "HEALTHKIT_HEIGHTWEIGHT_READ",
    "HEALTHKIT_HEIGHTWEIGHT_WRITE",
    "HEALTHKIT_HEARTRATE_READ",
    "HEALTHKIT_HEARTRATE_WRITE"
] // 所有的类型见下面所有权限type列表
let params = {}
params.types = types
health.requestAuthorization(params, (resp) => {
    let flag = resp.flag
    if (flag) {
        let success = resp.success
        if (success) {
            // 用户已经授权的类型,请求的权限用户不一定所有权限有给予授权,这里回调用户已经授权的类型
            let authorizedTypes = resp.authorizedTypes
            this.showMsg("成功授权的权限:" + JSON.stringify(authorizedTypes))
        } else {
            this.showMsg("授权失败:" + JSON.stringify(resp))
        }
    } else {
        this.showMsg("授权失败:" + JSON.stringify(resp))
    }
})

所有权限type列表

  • HEALTHKIT_HISTORYDATA_OPEN_WEEK

  • HEALTHKIT_HISTORYDATA_OPEN_MONTH

  • HEALTHKIT_HISTORYDATA_OPEN_YEAR

  • HEALTHKIT_HEIGHTWEIGHT_READ

  • HEALTHKIT_HEARTRATE_READ

  • HEALTHKIT_HEIGHTWEIGHT_WRITE

  • HEALTHKIT_HEIGHTWEIGHT_BOTH

  • HEALTHKIT_STEP_READ // 步数 读

  • HEALTHKIT_STEP_WRITE // 步数 写

  • HEALTHKIT_STEP_BOTH

  • HEALTHKIT_LOCATION_READ

  • HEALTHKIT_LOCATION_WRITE

  • HEALTHKIT_LOCATION_BOTH

  • HEALTHKIT_HEARTRATE_WRITE

  • HEALTHKIT_HEARTHEALTH_BOTH

  • HEALTHKIT_BLOODGLUCOSE_READ

  • HEALTHKIT_BLOODGLUCOSE_WRITE

  • HEALTHKIT_BLOODGLUCOSE_BOTH

  • HEALTHKIT_DISTANCE_READ // 距离、海拔 读

  • HEALTHKIT_DISTANCE_WRITE // 距离、海拔 写

  • HEALTHKIT_DISTANCE_BOTH

  • HEALTHKIT_SPEED_READ

  • HEALTHKIT_SPEED_WRITE

  • HEALTHKIT_SPEED_BOTH

  • HEALTHKIT_CALORIES_READ // 卡路里读

  • HEALTHKIT_CALORIES_WRITE // 卡路里写

  • HEALTHKIT_CALORIES_BOTH

  • HEALTHKIT_PULMONARY_READ

  • HEALTHKIT_PULMONARY_WRITE

  • HEALTHKIT_PULMONARY_BOTH

  • HEALTHKIT_STRENGTH_READ // 中高强度 读

  • HEALTHKIT_STRENGTH_WRITE // 中高强度 写

  • HEALTHKIT_STRENGTH_BOTH

  • HEALTHKIT_ACTIVITY_READ // 速度 读

  • HEALTHKIT_ACTIVITY_WRITE // 速度 写

  • HEALTHKIT_ACTIVITY_BOTH

  • HEALTHKIT_BODYFAT_READ

  • HEALTHKIT_BODYFAT_WRITE

  • HEALTHKIT_BODYFAT_BOTH

  • HEALTHKIT_SLEEP_READ

  • HEALTHKIT_SLEEP_WRITE

  • HEALTHKIT_SLEEP_BOTH

  • HEALTHKIT_NUTRITION_READ

  • HEALTHKIT_NUTRITION_WRITE

  • HEALTHKIT_NUTRITION_BOTH

  • HEALTHKIT_BLOODPRESSURE_READ

  • HEALTHKIT_BLOODPRESSURE_WRITE

  • HEALTHKIT_BLOODPRESSURE_BOTH

  • HEALTHKIT_OXYGENSTATURATION_READ

  • HEALTHKIT_OXYGENSTATURATION_WRITE

  • HEALTHKIT_OXYGENSTATURATION_BOTH

  • HEALTHKIT_OXYGEN_SATURATION_READ

  • HEALTHKIT_OXYGEN_SATURATION_WRITE

  • HEALTHKIT_OXYGEN_SATURATION_BOTH

  • HEALTHKIT_BODYTEMPERATURE_READ

  • HEALTHKIT_BODYTEMPERATURE_WRITE

  • HEALTHKIT_BODYTEMPERATURE_BOTH

  • HEALTHKIT_REPRODUCTIVE_READ

  • HEALTHKIT_REPRODUCTIVE_WRITE

  • HEALTHKIT_REPRODUCTIVE_BOTH

  • HEALTHKIT_ACTIVITY_RECORD_READ

  • HEALTHKIT_ACTIVITY_RECORD_WRITE

  • HEALTHKIT_ACTIVITY_RECORD_BOTH

  • HEALTHKIT_EXTEND_SPORT_READ

  • HEALTHKIT_STRESS_READ

  • HEALTHKIT_STRESS_WRITE

  • HEALTHKIT_STRESS_BOTH

  • HEALTHKIT_HUAWEIHEALTH_LINK

  • HEALTHKIT_SCOPE_PREFIX

  • 读取健康数据


let params = {}
params.types = ["DT_CONTINUOUS_STEPS_DELTA"] // 所有的数据类型见下面
// 按照时间筛选
params.startDay = "2025-10-01 23:59:59"
params.endDay = "2025-10-08 23:59:59"
health.executeQuery(params, (resp) => {
    let flag = resp.flag
    if (flag) {
        let data = resp.data
        this.showMsg("获取到数据:" + JSON.stringify(data))
    } else {
        this.showMsg("获取数据失败:" + JSON.stringify(resp))
    }
})

所有的数据类型列表:

  • DT_UNUSED_DATA_TYPE

  • DT_CONTINUOUS_STEPS_DELTA // 步数

  • DT_CONTINUOUS_STEPS_TOTAL // 步数 总值

  • DT_INSTANTANEOUS_STEPS_RATE // 步频

  • DT_CONTINUOUS_STEPS_RATE_STATISTIC // 步频 统计

  • DT_CONTINUOUS_ACTIVITY_SEGMENT

  • DT_CONTINUOUS_ACTIVITY_FRAGMENT

  • DT_CONTINUOUS_CALORIES_CONSUMED

  • DT_CONTINUOUS_CALORIES_BURNT // 卡路里

  • DT_CONTINUOUS_CALORIES_BURNT_TOTAL // 卡路里 总值

  • DT_INSTANTANEOUS_CALORIES_BMR

  • DT_INSTANTANEOUS_POWER_SAMPLE

  • DT_INSTANTANEOUS_ACTIVITY_SAMPLE

  • DT_INSTANTANEOUS_ACTIVITY_SAMPLES

  • DT_INSTANTANEOUS_HEART_RATE // 心率,次/分钟

  • DT_INSTANTANEOUS_EXERCISE_HEART_RATE // 运动心率

  • DT_INSTANTANEOUS_LOCATION_SAMPLE // 位置

  • DT_INSTANTANEOUS_LOCATION_TRACE

  • DT_CONTINUOUS_EXERCISE_HEART_RATE_STATISTICS // 运动心率 统计

  • DT_CONTINUOUS_DISTANCE_DELTA // 距离

  • DT_CONTINUOUS_DISTANCE_TOTAL // 距离 总值

  • DT_INSTANTANEOUS_SPEED // 速度

  • DT_CONTINUOUS_BIKING_WHEEL_ROTATION_TOTAL

  • DT_INSTANTANEOUS_BIKING_WHEEL_ROTATION

  • DT_INSTANTANEOUS_WHEEL_ROTATION

  • DT_CONTINUOUS_BIKING_PEDALING_TOTAL

  • DT_INSTANTANEOUS_BIKING_PEDALING_RATE

  • DT_INSTANTANEOUS_HEIGHT // 身高,单位米

  • DT_INSTANTANEOUS_BODY_WEIGHT // 体重

  • DT_INSTANTANEOUS_BODY_FAT_RATE

  • DT_INSTANTANEOUS_NUTRITION_FACTS

  • DT_INSTANTANEOUS_HYDRATE

  • DT_CONTINUOUS_HYDRATE_TOTAL

  • DT_CONTINUOUS_WORKOUT_DURATION

  • DT_CONTINUOUS_EXERCISE_INTENSITY

  • DT_CONTINUOUS_EXERCISE_INTENSITY_V2 // 中高强度

  • DT_STATISTICS_EXERCISE_INTENSITY_V2 // 中高强度 统计

  • DT_STATISTICS_SLEEP

  • DT_CONTINUOUS_SLEEP // 睡眠状态,取值如下:1:浅睡 2:梦睡(快速眼动)3:深睡 4:清醒 5:午睡(零星小睡)

  • DT_SLEEP_ON_OFF_BED

  • DT_INSTANTANEOUS_STRESS // 压力

  • DT_INSTANTANEOUS_STRESS_STATISTICS // 压力 统计

  • DT_INSTANTANEOUS_RUN_VDOT

  • DT_INSTANTANEOUS_RUN_TRAINING_INDEX

  • DT_INSTANTANEOUS_RUN_FATIGUE_INDEX

  • DT_INSTANTANEOUS_RUN_PHYSICAL_FITNESS_INDEX

  • DT_INSTANTANEOUS_RUN_STATE_INDEX

  • DT_INSTANTANEOUS_RESTING_HEART_RATE

  • DT_RESTING_HEART_RATE_STATISTICS

  • DT_CONTINUOUS_JUMP // 跳跃

  • DT_CONTINUOUS_JUMP_STATISTICS // 跳跃 统计

  • DT_INSTANTANEOUS_ALTITUDE // 海拔

  • DT_CONTINUOUS_ALTITUDE_STATISTICS // 海拔 统计

  • DT_INSTANTANEOUS_SKIP_SPEED // 跳绳速度

  • DT_CONTINUOUS_SKIP_SPEED_STATISTICS // 跳绳速度 统计

  • DT_CONTINUOUS_RUN_POSTURE // 跑步姿势

  • DT_CONTINUOUS_RUN_POSTURE_STATISTICS // 跑步姿势 统计

  • DT_ACTIVITY_FEATURE_JUMPING_ROPE

  • DT_ACTIVITY_FEATURE_BASKETBALL

  • DT_ACTIVITY_FEATURE_FREEDIVING

  • DT_ACTIVITY_FEATURE_SCUBA_DIVING

  • DT_ACTIVITY_FEATURE_BREATH_HOLDING_TRAIN

  • DT_ACTIVITY_FEATURE_BREATH_HOLDING_TEST

  • DT_INSTANTANEOUS_FREEDIVING_ASCENT_SPEED

  • DT_INSTANTANEOUS_FREEDIVING_DESCENT_SPEED

  • DT_CONTINUOUS_FREEDIVING_ASCENT_SPEED_STATISTICS

  • DT_CONTINUOUS_FREEDIVING_DESCENT_SPEED_STATISTICS

  • DT_ACTIVITY_FEATURE_ROWING

  • DT_INSTANTANEOUS_STROKE_RATE

  • DT_INSTANTANEOUS_PEDALING_RATE // 脚踏节奏

  • DT_CONTINUOUS_STROKE_RATE_STATISTICS

  • DT_CONTINUOUS_PEDALING_RATE_STATISTICS // 脚踏节奏 统计

  • DT_RESISTANCE

  • DT_RESISTANCE_STATISTICS

  • DT_VO2MAX

  • DT_VO2MAX_STATISTICS

  • DT_INSTANTANEOUS_SWIMMING_STROKE_RATE

  • DT_CONTINUOUS_SWIMMING_STROKE_RATE_STATISTICS

  • DT_INSTANTANEOUS_SWIMMING_SWOLF

  • DT_CONTINUOUS_SWIMMING_SWOLF_STATISTICS

  • DT_DIVING_DEPTH

  • DT_DIVING_DEPTH_STATISTICS

  • DT_WATER_TEMPERATURE

  • DT_WATER_TEMPERATURE_STATISTICS

  • DT_ACTIVITY_FEATURE_SWIMMING_OPEN_WATER

  • DT_ACTIVITY_FEATURE_SWIMMING_POOL

  • DT_ACTIVITY_FEATURE_SKIING

  • DT_ACTIVITY_FEATURE_SNOWBOARDING

  • DT_ACTIVITY_FEATURE_GOLF

  • DT_ACTIVITY_FEATURE_GOLF_AREA

  • POLYMERIZE_CONTINUOUS_WORKOUT_DURATION

  • POLYMERIZE_CONTINUOUS_ACTIVITY_STATISTICS

  • POLYMERIZE_CONTINUOUS_CALORIES_BMR_STATISTICS

  • POLYMERIZE_STEP_COUNT_DELTA

  • POLYMERIZE_DISTANCE_DELTA

  • POLYMERIZE_CALORIES_CONSUMED

  • POLYMERIZE_CALORIES_EXPENDED

  • POLYMERIZE_CONTINUOUS_EXERCISE_INTENSITY_STATISTICS

  • POLYMERIZE_CONTINUOUS_HEART_RATE_STATISTICS // 心率 统计

  • POLYMERIZE_CONTINUOUS_LOCATION_BOUNDARY_RANGE

  • POLYMERIZE_CONTINUOUS_POWER_STATISTICS

  • POLYMERIZE_CONTINUOUS_SPEED_STATISTICS // 速度 统计

  • POLYMERIZE_CONTINUOUS_BODY_FAT_RATE_STATISTICS

  • POLYMERIZE_CONTINUOUS_BODY_WEIGHT_STATISTICS

  • POLYMERIZE_CONTINUOUS_HEIGHT_STATISTICS

  • POLYMERIZE_CONTINUOUS_NUTRITION_FACTS_STATISTICS

  • POLYMERIZE_HYDRATION

  • POLYMERIZE_LOCATION // 位置 统计

  • POLYMERIZE_BREATH_HOLDING_TRAIN_STATISTICS

  • POLYMERIZE_FREEDIVING_STATISTICS

  • DT_DIVING_STATISTICS

  • DT_GOLF_AREA_STATISTICS

  • DT_MARK_POINT

  • 保存数据


let params = {}
params.dataArray = [{
    type: "DT_CONTINUOUS_STEPS_DELTA", // 类型见上面的所有的数据类型列表
    dataStreamName: "STEPS_DELTA",
    datas: [{
        startDay: "2025-10-01 23:59:59",
        endDay: "2025-10-02 23:59:59",
        fieldData: [{
            field: "FIELD_STEPS_DELTA", // 所有类型见下面所有的filed列表
            value: 2 // 根据field类型填写正确的value,一般value是字符串或数字
        }]
    }],
    metadata: {
        motion_type: "RUN" // 若写入的步数数据需要在运动健康App首页上展示,需要使用addMetadata对采样点添加如下元数据
    }
}]
health.executeSave(params, (resp) => {
    let resultArray = resp.resultArray
    if (resultArray) {
        let length = resultArray.length
        for (let i = 0; i < length; i++) {
            let model = resultArray[i]
            if (model.flag) {
                this.showMsg("这条数据保存成功:" + i)
            } else {
                this.showMsg("这条数据保存失败")
            }
        }

    }

})

所有的filed列表:

  • FIELD_PRECISION

  • FIELD_ALTITUDE

  • FIELD_TYPE_OF_ACTIVITY

  • FIELD_POSSIBILITY_OF_ACTIVITY

  • FIELD_BPM

  • FIELD_POSSIBILITY

  • FIELD_SPAN

  • FIELD_DISTANCE

  • FIELD_DISTANCE_DELTA

  • FIELD_HEIGHT

  • FIELD_STEPS_DELTA

  • FIELD_STEPS

  • FIELD_DURATION

  • FIELD_STEP_LENGTH

  • FIELD_LATITUDE

  • FIELD_LONGITUDE

  • FIELD_COORDINATE

  • FIELD_BODY_WEIGHT

  • FIELD_BMI

  • FIELD_BODY_FAT

  • FIELD_BODY_FAT_RATE

  • FIELD_MUSCLE_MASS

  • FIELD_BASAL_METABOLISM

  • FIELD_MOISTURE

  • FIELD_MOISTURE_RATE

  • FIELD_VISCERAL_FAT_LEVEL

  • FIELD_BONE_SALT

  • FIELD_PROTEIN_RATE

  • FIELD_BODY_AGE

  • FIELD_BODY_SCORE

  • FIELD_SKELETAL_MUSCLEL_MASS

  • FIELD_IMPEDANCE

  • FIELD_CIRCUMFERENCE

  • FIELD_SPEED

  • FIELD_RPM

  • FIELD_STEP_RATE

  • FIELD_ROTATION

  • FIELD_CALORIES

  • FIELD_CALORIES_TOTAL

  • FIELD_POWER

  • FIELD_HYDRATE

  • FIELD_HYDRATE_TOTAL

  • FIELD_MEAL

  • FIELD_FOOD

  • FIELD_NUTRIENTS

  • FIELD_NUTRIENTS_FACTS

  • FIELD_FRAGMENTS

  • FIELD_AVG

  • FIELD_MAX

  • FIELD_LAST

  • FIELD_AVG_BODY_FAT_RATE

  • FIELD_MAX_BODY_FAT_RATE

  • FIELD_MIN_BODY_FAT_RATE

  • FIELD_AVG_SKELETAL_MUSCLEL_MASS

  • FIELD_MAX_SKELETAL_MUSCLEL_MASS

  • FIELD_MIN_SKELETAL_MUSCLEL_MASS

  • FIELD_JUMP_HEIGHT

  • FIELD_PASSAGE_DURATION

  • FIELD_JUMP_TIMES

  • FIELD_MIN_JUMP_HEIGHT

  • FIELD_AVG_JUMP_HEIGHT

  • FIELD_MAX_JUMP_HEIGHT

  • FIELD_MIN_PASSAGE_DURATION

  • FIELD_AVG_PASSAGE_DURATION

  • FIELD_MAX_PASSAGE_DURATION

  • FIELD_MIN

  • FIELD_ASCENT_TOTAL

  • FIELD_DESCENT_TOTAL

  • FIELD_MIN_LATITUDE

  • FIELD_MIN_LONGITUDE

  • FIELD_MAX_LATITUDE

  • FIELD_MAX_LONGITUDE

  • FIELD_APPEARANCE

  • FIELD_INTENSITY

  • EXERCISE_TYPE

  • INTENSITY_MAP

  • FALL_ASLEEP_TIME

  • WAKE_UP_TIME

  • SLEEP_SCORE

  • SLEEP_LATENCY

  • GO_BED_TIME

  • PREPARE_SLEEP_TIME

  • OFF_BED_TIME

  • GO_BED_TIME_NEW

  • SLEEP_EFFICIENCY

  • LIGHT_SLEEP_TIME

  • DEEP_SLEEP_TIME

  • DREAM_TIME

  • AWAKE_TIME

  • ALL_SLEEP_TIME

  • WAKE_UP_CNT

  • DEEP_SLEEP_PART

  • SLEEP_TYPE

  • SLEEP_STATE

  • SLEEP_ON_OFF_BED_STATE

  • SCORE

  • GRADE

  • MEASURE_TYPE

  • STRESS_AVG

  • STRESS_MAX

  • STRESS_MIN

  • STRESS_LAST

  • MEASURE_COUNT

  • SLEEP_RESPIRATORY_TYPE

  • SLEEP_RESPIRATORY_VALUE

  • EVENT_NAME

  • VDOT

  • TRAINING_INDEX

  • FATIGUE_INDEX

  • PHYSICAL_FITNESS_INDEX

  • STATE_INDEX

  • ALTITUDE

  • SKIP_SPEED

  • AVG

  • MAX

  • MIN

  • LAST

  • SKIP_NUM

  • STUMBLING_ROPE

  • MAX_SKIPPING_TIMES

  • 删除数据


let params = {}
params.type = "DT_CONTINUOUS_STEPS_DELTA"  // 类型见上面的所有的数据类型列表
params.dataStreamName = "STEPS_DELTA" // 类型值的后面几个字符串
params.startDay = "2025-10-01 23:59:59"
params.endDay = "2025-10-02 23:59:59"

health.executeDelete(params, (resp) => {
    let opt = resp.opt
    switch (opt) {
        case "OnSuccessListener": {
            this.showMsg("删除成功")
        }
        break;
        case "OnFailureListener": {
            this.showMsg("删除失败")
        }
        break;
        default:
            break;
    }

})

鸿蒙接口,目前仅支持【运动健康采样数据】,如需其他模块数据(锻炼记录、健康记录、实时三环数据),请进入交流群私聊作者

  • 请求权限

let readDataTypes = [
    "bodyTemperature"
]
let writeDataTypes = [
    "bodyTemperature"
]
let params = {}
params.readDataTypes = readDataTypes
params.writeDataTypes = writeDataTypes
health.requestAuthorization(params, (resp) => {
    let flag = resp.flag
    if (flag) {
        // 用户已经授权的类型,请求的权限用户不一定所有权限有给予授权,这里回调用户已经授权的类型
        let writeDataTypes = resp.writeDataTypes
        let readDataTypes = resp.readDataTypes
        this.showMsg("成功授权的权限:" + JSON.stringify(resp))
    } else {
        this.showMsg("授权失败:" + JSON.stringify(resp))
    }
})

所有的数据类型列表:

  • dailyActivities // 日常活动

  • heartRate // 动态心率

  • restingHeartRate // 静息心率

  • bloodOxygenSaturation // 血氧

  • stress // 压力

  • bodyTemperature // 体温

  • skinTemperature // 皮肤体温

  • bloodPressure // 血压

  • height // 身高

  • weight // 体重

  • emotion // 情绪

  • heartRateVariability // 心率变异性

  • sleepRecord // 睡眠

  • sleepNapRecord // 睡眠

  • exerciseSequenceHelper // 锻炼记录

  • 获取数据


let params = {}
params.dataType = "bodyTemperature" // 类型见上面所有的数据类型列表
// 按照时间筛选
params.startDay = "2025-10-01 23:59:59"
params.endDay = "2025-10-08 23:59:59"

health.executeQuery(params, (resp) => {
    let flag = resp.flag
    if (flag) {
        let data = resp.data
        this.showMsg("获取到数据:" + JSON.stringify(data))
    } else {
        this.showMsg("获取数据失败:" + JSON.stringify(resp))
    }
})
  • 保存数据

let params = {}
params.dataArray = [{
    dataType: "bodyTemperature", // 类型见上面所有的数据类型列表
    startDay: "2025-10-01 23:59:59",
    endDay: "2025-10-02 23:59:59",
    localDate: '10/30/2023',
    timeZone: '+0800',
    modifiedTime: 1698633801000,
    // insertDataSource插入数据源接口返回的dataSourceId,或读取已有数据源的dataSourceId
    dataSourceId: this.dataSourceId, //数据源ID,可以新建数据源或者查询现有数据源
    fields: {
        bodyTemperature: 39 // 数据类型对应的健值对,如果
    }
}]
health.executeSave(params, (resp) => {
    let resultArray = resp.resultArray
    if (resultArray) {
        let length = resultArray.length
        for (let i = 0; i < length; i++) {
            let model = resultArray[i]
            if (model.flag) {
                this.showMsg("这条数据保存成功:" + i)
            } else {
                this.showMsg("这条数据保存失败")
            }
        }

    }

})
  • 创建数据源

let uniqueId = new Date().getTime() + ""
let params = {}
params.deviceInfo = {
    uniqueId: uniqueId,
    name: 'test', // 插入数据源时此字段必填
    category: "WEARABLE_BAND", // 插入数据源时此字段必填
    productId: '0554', // 插入数据源时此字段必填
    model: 'lotana',
    manufacturer: 'HUAWEI',
    mac: 'testDeviceMac',
    sn: 'testDeviceSn',
    hardwareVersion: '1',
    softwareVersion: '2',
    firmwareVersion: '3',
    udid: ''
}
health.saveDataSource(params, (resp) => {
     let flag = resp.flag
     if(flag) {
         this.dataSourceId = resp.dataSourceId
         this.showMsg("添加成功")
     } else {
         this.showMsg("添加失败:" + JSON.stringify(resp))
     }
})
  • 获取数据源

let uniqueId = "xxxx"
health.getDataSource(uniqueId, (resp)=>{
    let flag = resp.flag
     if(flag) {
         let dataSources = resp.dataSources
         for(let i = 0; i < dataSources.length; i ++) {
             let model = dataSources[i]
             let dataSourceId = model.dataSourceId
         }
     }
})

如需更多数据请联系作者https://www.cnblogs.com/wenrisheng/p/18323027

隐私、权限声明

1. 本插件需要申请的系统权限列表:

健康数据权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: