You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WearOS三星Watch 6独立获取多类健康数据技术问询

基于MeasureDataCompose扩展获取WearOS离线健康数据

你使用的MeasureDataCompose示例基于Google Health Services API开发,所有你需要的健康数据都可通过该API离线获取,核心是修改权限声明、数据类型订阅和回调解析逻辑,以下是具体操作:

1. 补充权限声明

在AndroidManifest.xml里替换或补充示例中的心率权限,添加对应数据的权限:

<!-- 心率(示例已有) -->
<uses-permission android:name="android.permission.health.READ_HEART_RATE" />
<!-- SPO2 -->
<uses-permission android:name="android.permission.health.READ_SPO2" />
<!-- 血压 -->
<uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE" />
<!-- 体温 -->
<uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE" />
<!-- 步数 -->
<uses-permission android:name="android.permission.health.READ_STEPS" />
<!-- 睡眠 -->
<uses-permission android:name="android.permission.health.READ_SLEEP" />

2. 修改数据类型订阅

在示例的MeasureDataViewModel(或核心逻辑类)中,将单一的心率数据类型替换为你需要的集合:

  • 心率:DataType.HEART_RATE_BPM
  • SPO2:DataType.SPO2
  • 血压:DataType.BLOOD_PRESSURE(含收缩压+舒张压组合数据)
  • 体温:DataType.BODY_TEMPERATURE
  • 步数:DataType.STEPS_CUMULATIVE(累计步数)或DataType.STEPS_PER_MINUTE
  • 睡眠:DataType.SLEEP_SEGMENT(睡眠阶段)或DataType.SLEEP_DURATION_TOTAL(总睡眠时长)

示例修改后的订阅代码:

// 替换原单一心率订阅为多数据订阅
val request = MeasureDataRequest(
    dataTypes = setOf(
        DataType.HEART_RATE_BPM,
        DataType.SPO2,
        DataType.BLOOD_PRESSURE,
        DataType.BODY_TEMPERATURE,
        DataType.STEPS_CUMULATIVE,
        DataType.SLEEP_SEGMENT
    ),
    updateFrequency = UpdateFrequency.HIGH // 睡眠数据可单独设置为LOW
)

3. 解析不同数据的回调结果

示例仅处理了心率数据,需在onDataReceived回调中根据数据类型解析对应字段:

override fun onDataReceived(data: DataPoint) {
    when (data.dataType) {
        DataType.HEART_RATE_BPM -> {
            val heartRate = data.getValue(Field.FIELD_BPM).asFloat()
            // 更新UI或存储心率数据
        }
        DataType.SPO2 -> {
            val spo2Value = data.getValue(Field.FIELD_SATURATION).asFloat()
            // 处理SPO2数据
        }
        DataType.BLOOD_PRESSURE -> {
            val systolic = data.getValue(Field.FIELD_SYSTOLIC).asFloat()
            val diastolic = data.getValue(Field.FIELD_DIASTOLIC).asFloat()
            // 处理血压数据
        }
        DataType.BODY_TEMPERATURE -> {
            val temp = data.getValue(Field.FIELD_TEMPERATURE).asFloat()
            // 处理体温数据
        }
        DataType.STEPS_CUMULATIVE -> {
            val steps = data.getValue(Field.FIELD_STEPS).asLong()
            // 处理累计步数
        }
        DataType.SLEEP_SEGMENT -> {
            val sleepStage = data.getValue(Field.FIELD_SLEEP_STAGE).asInt()
            // 睡眠阶段对应值:0=清醒,1=浅睡,2=深睡,3=快速眼动
            // 处理睡眠阶段数据
        }
    }
}

4. 关键注意事项

  • 血压、体温等数据依赖手表硬件支持,三星Watch 6已覆盖,但需确保手表系统为WearOS 4及以上
  • 睡眠数据为批量更新,无需高频率订阅,建议单独设置UpdateFrequency.LOW
  • 所有数据获取需用户授权,可复用示例的权限请求逻辑,只需补充完整权限列表

内容的提问来源于stack exchange,提问作者M. Usman Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:06:13