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
相关产品推荐
相关产品推荐

