更新记录
1.0.11(2025-12-02)
- ios增加获取授权状态接口authorizationStatus
1.0.10(2025-10-29)
- 增加iOS数据类型:HRV心率变异性
1.0.9(2025-10-21)
- 增加华为和鸿蒙的支持
平台兼容性
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配置
- 拷贝demo里的nativeResources、Info.plist文件到项目根目录
- 苹果网站创建Identifiers后,点击进入到详情,勾选Capabilities下的HealthKit,重新生成签名文件
华为配置
- 申请账号服务,需要绑定包名和签名的SHA256,记录下appid
- 申请Health Service Kit服务
- 拷贝demo里的AndroidManifest.xml文件到项目根目录,将里面com.huawei.hms.client.appid对应的value值改为上面的appid
鸿蒙配置
- 申请运动健康服务
- 配置Client ID
- 拷贝demo里的harmony-configs文件夹到项目根目录,如果项目已经有modules.json5,参考demo在里面增***tadata和querySchemes这两个配置,将client_id替换为上面申请到值
集成步骤
- 集成插件,集成插件步骤请参考 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
}
}
})

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 437
赞赏 0
下载 11714972
赞赏 1818
赞赏
京公网安备:11010802035340号