Android端读取Wear OS三星Watch 5健康数据的技术困惑
读取三星Watch 5健康数据的解决方案
一、Google Fit API vs Health Connect:选择建议
- 优先使用Health Connect:它是Android官方推出的统一健康数据交互框架,目前三星健康已全面支持将手表同步到手机的健康数据同步至Health Connect,是当前对接三星设备健康数据的最优方案。
- Google Fit API:更多面向Google Fit生态,对于三星健康数据的兼容性和获取效率不如Health Connect直接对接,不推荐作为首选。
二、为什么官方示例读不到三星健康数据?
- 三星健康未开启同步:默认情况下,三星健康不会主动将数据同步到Health Connect,需要用户手动开启同步权限。
- 示例应用的局限性:官方Health Connect示例仅演示基础的读写逻辑,默认仅操作自身生成的测试数据,未配置读取第三方应用(如三星健康)同步数据的权限和查询逻辑。
三、具体实现步骤
1. 配置权限与依赖
- 在
AndroidManifest.xml中声明所需的健康数据读取权限:<uses-permission android:name="android.permission.health.READ_STEPS" /> <uses-permission android:name="android.permission.health.READ_HEART_RATE" /> <!-- 根据需求添加其他权限,如READ_SLEEP、READ_ACTIVE_CALORIES等 --> - 在模块
build.gradle中添加Health Connect Jetpack依赖:dependencies { implementation "androidx.health.connect:connect-client:1.1.0" }
2. 检查Health Connect可用性并申请权限
- 先验证设备是否支持Health Connect:
val healthConnectClient = HealthConnectClient.getOrCreate(context) when (healthConnectClient.sdkStatus) { SdkStatus.AVAILABLE -> { // 继续后续流程 } SdkStatus.REQUIRES_UPDATE -> { // 提示用户升级Health Connect } SdkStatus.NOT_INSTALLED -> { // 引导用户安装Health Connect } } - 申请读取权限:
val requiredPermissions = setOf( Permission.createReadPermission(StepsRecord::class), Permission.createReadPermission(HeartRateRecord::class) ) val requestContract = HealthConnectClient.requestPermissionsContract() startActivityForResult( requestContract.createIntent(context, requiredPermissions), HEALTH_PERMISSION_REQUEST_CODE )
3. 查询同步后的健康数据
权限通过后,即可查询Health Connect中存储的三星健康数据(需确保三星健康已开启同步):
val timeRange = TimeRangeFilter.between( Instant.now().minus(Duration.ofDays(1)), // 过去24小时 Instant.now() ) // 查询步数数据 val stepsRequest = ReadRecordsRequest( recordType = StepsRecord::class, timeRangeFilter = timeRange ) val stepsResponse = healthConnectClient.readRecords(stepsRequest) val totalSteps = stepsResponse.records.sumOf { it.count } // 查询心率数据 val heartRateRequest = ReadRecordsRequest( recordType = HeartRateRecord::class, timeRangeFilter = timeRange ) val heartRateResponse = healthConnectClient.readRecords(heartRateRequest) val heartRateSamples = heartRateResponse.records.flatMap { it.samples }
4. 引导用户开启三星健康同步
必须让用户完成以下操作:
打开三星健康APP → 进入「我的」页面 → 点击「设置」 → 选择「数据同步」 → 找到「Health Connect」 → 开启需要同步的健康数据类型(如步数、心率、睡眠等)。
内容的提问来源于stack exchange,提问作者M. Usman Khan
相关产品推荐
相关产品推荐

