Wear OS 设备通常包含哪些传感器?如何获取心率、血氧数据?

解读

面试官想确认两点:

  1. 对 Wear OS 硬件生态的“常识”——哪些传感器是 Google 官方认证或国内主流穿戴 SoC 平台(高通 4100/5100、展锐 W317、恒玄 2700 等)普遍集成的;
  2. 对 Android 传感器框架与健康服务双通道的“实战”——既要知道 SensorManager 的通用流程,也要知道国内手表因 GMS 缺失而必须走厂商 SDK 或 Health Services 的兼容路线。
    回答时先给“全景图”,再分别给出“官方路线”与“国内路线”的代码骨架与权限声明,最后点出功耗、精度、后台采集的坑,体现落地经验。

知识点

  1. Wear OS 3+ 强制支持的“核心传感器”:加速度、陀螺仪、磁力计、气压计、心率(PPG)、血氧(SpO₂,中国版可选)。
  2. 数据通道:
    a) Android SensorManager(TYPE_HEART_RATE、TYPE_HR、TYPE_O2)——最通用,但精度依赖 HAL 实现;
    b) Google Health Services(PassiveMonitoringClient + MeasureClient)——Google 官方推荐,自动做批处理、低功耗、后台限制豁免;
    c) 厂商 SDK(华为 Health Kit、小米 Wear SDK、OPPO HeyTap Health SDK)——国内无 GMS 时必须接入,走账号授权 + 设备级权限。
  3. 权限模型:
    • 普通权限:android.permission.BODY_SENSORS
    • Android 13+ 需运行时申请:android.permission.BODY_SENSORS_BACKGROUND
    • 国内厂商额外需要“运动健康”级权限或用户手动在配套 App 中打开“连续测量”开关。
  4. 功耗与体验:
    • 心率 1 Hz 连续采样 ≈ 5% 额外电量;血氧 1 Hz 连续采样 ≈ 8–10%。
    • 必须调用 SensorManager.registerDirectChannel 或 Health Services 的 PassiveMonitoringClient 做批处理,否则系统 5 分钟后强行降频。
    • 血氧对佩戴松紧、肤色、低温极度敏感,需做信号质量(ACC 辅助)过滤,否则数据漂移 > 5%。

答案

“Wear OS 设备在国内市场通常集成六类传感器:三轴加速度、三轴陀螺仪、三轴磁力计、气压计、光学心率(PPG)以及光学血氧(SpO₂)。其中血氧传感器在 Google 官方认证里属于‘可选’,但华为 Watch 4、OPPO Watch 3、小米 Watch S3 等国产旗舰都已标配。
获取数据分两条路:

  1. 有 GMS 的海外版:

    1. 在 AndroidManifest 里声明
      <uses-permission android:name="android.permission.BODY_SENSORS"/>
      <uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND"/>
      <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
    2. 使用 Google Health Services:
      val measureClient = HealthServices.getClient(context).measureClient
      measureClient.registerMeasureCallback(
      DataType.HEART_RATE_BPM,
      heartRateCallback
      )
      血氧同理,DataType.OXYGEN_SATURATION。
    3. 系统会在后台自动批处理,采样频率 1–10 Hz 可调,电量消耗比裸调 SensorManager 低 30% 以上。
  2. 国内无 GMS 版:

    1. 走厂商 SDK,例如华为 Health Kit:
      val option = SampleSetOption.Builder()
      .addDataType(DataType.DT_CONTINUOUS_HEART_RATE)
      .addDataType(DataType.DT_CONTINUOUS_SPO2)
      .build()
      HuaweiHiHealth.getSamplingClient(context)
      .registerSampleListener(option, listener)
    2. 权限除 BODY_SENSORS 外,还需在华为运动健康 App 里由用户手动打开“连续测量心率/血氧”开关,否则只能读到空值。

无论哪条路,都必须在 onPause 里反注册,防止 5 分钟后被系统拉黑名单;血氧数据返回后先用 SignalQuality 字段过滤,ACC 方差 > 0.3 g² 或 PPG 信噪比 < 10 dB 时直接丢弃,避免 UI 上跳点。”

拓展思考

  1. 折叠屏、5G、AI 加速在 Wear 上已出现“腕上微信”场景,后台心率 + IMU 联合推理情绪状态,需要把 Health Services 的 PassiveMonitoringClient 与 TensorFlow Lite 的 NNAPI 委托绑定,在 DSP 上跑 8-bit 量化模型,功耗 < 1 mA。
  2. 国内隐私合规:血氧属于“个人生理特征”敏感信息,采集前必须弹《个人信息处理规则》并取得“单独同意”,否则应用市场审核直接驳回;同时需要接入国密 SM4 本地加密,密钥放 TEE,上传走 https + 双向证书校验。
  3. 未来趋势:Google 在 Wear OS 5 预览版里把 UWB 芯片也纳入 CTS 验证,下一步将用 UWB + IMU 做无感手势,取代实体表冠;作为开发者,现在就可以把 SensorManager.getDynamicSensorList 里类型为 0x0101000A 的 UWB 传感器提前适配,抢占生态红利。