Android Studio PassiveMonitoringClient无法接收Wear OS模拟器合成心率数据
心率数据读取问题(Wear OS 4 + Health Services PassiveMonitoringClient)
我在运行Wear OS 4/API Level 14的模拟手表上,使用最新版Android Studio Preview,通过Health Services的PassiveMonitoringClient尝试记录心率数据,编写了最小可用示例,但回调从未被调用,日志也没有打印心率数据。已确认ADB连接到正确的模拟设备,但不确定合成数据命令是否生效。
代码片段(MainActivity的OnCreate方法)
val healthClient = HealthServices.getClient(this) val passiveMonitoringClient = healthClient.passiveMonitoringClient val passiveListenerConfig = PassiveListenerConfig.builder() .setDataTypes(setOf(DataType.HEART_RATE_BPM, DataType.GOLF_SHOT_COUNT)) .build() val passiveListenerCallback: PassiveListenerCallback = object : PassiveListenerCallback { override fun onNewDataPointsReceived(dataPoints: DataPointContainer) { for (dataPoint in dataPoints.sampleDataPoints) { val heartRate = dataPoint.value Log.i("WearApp", "Received heart rate: $heartRate") } } } passiveMonitoringClient.setPassiveListenerCallback( passiveListenerConfig, passiveListenerCallback, )
使用的ADB命令
启用合成数据源:
adb shell am broadcast \ -a "whs.USE_SYNTHETIC_PROVIDERS" \ com.google.android.wearable.healthservices
启动步行活动:
adb shell am broadcast \ -a "whs.synthetic.user.START_WALKING" \ com.google.android.wearable.healthservices
清单文件权限配置
<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" /> <uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
排查与解决建议
- 动态请求权限:Android 13+要求动态申请敏感权限,即使清单已声明,也必须在代码中请求
BODY_SENSORS、BODY_SENSORS_BACKGROUND和health.READ_HEART_RATE权限,否则Health Services不会回调数据。 - 验证合成数据服务状态:执行ADB命令后,通过
adb logcat | grep whs查看日志,确认合成数据源是否成功启用,步行活动是否触发。 - 过滤目标数据类型:当前回调遍历所有
sampleDataPoints,包含了不需要的高尔夫挥杆数据,建议针对性过滤心率数据:override fun onNewDataPointsReceived(dataPoints: DataPointContainer) { dataPoints.getData(DataType.HEART_RATE_BPM)?.let { heartRateDataPoints -> for (dataPoint in heartRateDataPoints) { val heartRate = dataPoint.value.asFloat() Log.i("WearApp", "Received heart rate: $heartRate") } } } - 简化监听配置:移除
DataType.GOLF_SHOT_COUNT,只保留心率数据监听,减少干扰。 - 更新Health Services:确保模拟器的Google Play服务是最新版本,Health Services组件正常运行。
- 确保监听生命周期稳定:如果Activity销毁,回调会失效,测试时保持Activity在前台,或把监听逻辑移至Service中。
内容的提问来源于stack exchange,提问作者Adam Saleh
相关产品推荐
相关产品推荐

