非Expo环境下React Native项目配置react-native-health-connect求助
解决React Native集成react-native-health-connect无法获取步数的问题
核对原生权限配置
Expo会自动处理部分安卓原生配置,但纯RN项目得手动添加:- 打开
android/app/src/main/AndroidManifest.xml,补充权限和Activity声明:<uses-permission android:name="android.permission.health.READ_STEPS" /> <uses-permission android:name="android.permission.health.WRITE_STEPS" /> <application> <activity android:name="com.google.android.health.connect.HealthConnectDefaultActivity" android:exported="true"> <intent-filter> <action android:name="android.health.connect.action.OPEN_HEALTH_CONNECT_SETTINGS" /> </intent-filter> </activity> </application> - 确认项目
targetSdkVersion≥34,Health Connect要求安卓14及以上API级别。
- 打开
手动实现权限请求逻辑
Expo封装了权限流程,纯RN项目需自行编写请求代码:import { HealthConnect } from 'react-native-health-connect'; const requestStepPermissions = async () => { const permissionGranted = await HealthConnect.requestPermissions([ { accessType: 'read', recordType: 'Steps' }, ]); if (!permissionGranted) { throw new Error('步数读取权限未授予'); } };必须先调用该方法获取权限,再执行步数查询。
检查Health Connect服务可用性
纯RN项目要先确认设备上的Health Connect服务正常运行:const checkHealthConnectStatus = async () => { const isAvailable = await HealthConnect.isAvailable(); if (!isAvailable) { await HealthConnect.installHealthConnect(); } };未安装Health Connect应用的话,无法获取任何健康数据。
校验步数查询的参数格式
确保查询的时间范围和格式正确,避免因参数错误导致无数据返回:const fetchDailySteps = async () => { const yesterday = new Date(Date.now() - 24 * 60 * 60 * 1000); const today = new Date(); const stepsData = await HealthConnect.getRecords('Steps', { startTime: yesterday.toISOString(), endTime: today.toISOString(), }); const totalSteps = stepsData.reduce((sum, record) => sum + record.count, 0); console.log('今日步数:', totalSteps); };时间格式必须为ISO字符串,时间范围也不宜过大。
清理缓存重新构建项目
原生配置修改后,缓存可能导致配置不生效:- 执行命令:
cd android && ./gradlew clean && cd .. - 重新运行项目:
npx react-native run-android
- 执行命令:
内容的提问来源于stack exchange,提问作者Pawan Kumar Singh
相关产品推荐
相关产品推荐

