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

Android Health Connect无数据,React Native应用readRecords返回空数组求助

解决react-native-health-connect读取数据为空的问题

核心问题定位

你的场景下,Samsung Health的数据未同步到Android 14内置的Health Connect,这是导致readRecords()返回空数组的主要原因——Health Connect本身没有数据,自然读取不到。


分步解决方案

1. 手动开启Samsung Health到Health Connect的同步

  • 打开Samsung Health应用,进入「设置」→「数据共享」→「Health Connect」
  • 勾选需要同步的类型:步数、距离、楼层攀爬
  • 确认同步权限后,回到手机系统设置的「Health Connect」→「数据与访问」,就能看到Samsung Health提供的数据了

2. 修复代码中的时间范围逻辑错误

你的代码中修改了传入的date原对象,导致时间范围计算异常:

// 错误:setHours会原地修改date对象,startTime和endTime最终都是当天23:59
startTime: new Date(date.setHours(0, 0, 0, 0)).toISOString(),
endTime: new Date(date.setHours(23, 59, 59, 999)).toISOString(),

修改为不修改原对象的写法:

const getHealthData = async () => {
  // ... 权限检查逻辑
  
  // 正确创建时间范围:复制原date对象再修改
  const startTime = new Date(date);
  startTime.setHours(0, 0, 0, 0);
  const endTime = new Date(date);
  endTime.setHours(23, 59, 59, 999);

  const timeRangeFilter: TimeRangeFilter = {
    operator: 'between',
    startTime: startTime.toISOString(),
    endTime: endTime.toISOString(),
  };

  // ... 读取数据逻辑
};

3. 验证权限配置与系统授权

  • 确认app.json中的权限配置正确(你的配置没问题):
    "android": {
      "permissions": [
        "android.permission.health.READ_STEPS",
        "android.permission.health.READ_DISTANCE",
        "android.permission.health.READ_FLOORS_CLIMBED"
      ]
    }
    
  • 进入手机「设置」→「应用」→ 你的应用 →「权限」→「健康」,确认所有读取权限已完全授予

4. 测试大范围数据读取

先尝试读取最近7天的数据,排除当天无同步数据的情况:

const timeRangeFilter: TimeRangeFilter = {
  operator: 'between',
  startTime: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(),
  endTime: new Date().toISOString(),
};

内容的提问来源于stack exchange,提问作者Nir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:31:06