Health Connect is Google’s unified API for managing health and fitness data on Android.
Instead of working with multiple SDKs, you can now use one standard interface to read and write health metrics such as steps, heart rate, workouts, calories, sleep, and much more.
Why Health Connect?
- One central location for all health data.
- Compatible with major apps and devices.
- User-controlled permissions to ensure privacy.
- Secure storage protected by device lock.
Note: Health Connect is available only on Android. iOS uses HealthKit, which is not related.
Prerequisites
- A React Native project set up (0.71+ is recommended).
- Android Studio installed.
- A device or emulator running Android 13 or higher (the Health Connect app is needed on Android 13).
- Screen lock enabled on the device.
1. Installing Health Connect
- For Android 13 (API 33) and lower: Download the Health Connect app from the Play Store.
- For Android 14 and above: Health Connect is already included.
- Tip: Check availability with:
import { isAvailable } from "react-native-health-connect";
const available = await isAvailable();
2. Add SDK Dependency
Add the following in app/build.gradle:
dependencies {
implementation "androidx.health.connect:connect-client:1.1.0-alpha11"
}
3. Configure Permissions
- Include necessary permissions in AndroidManifest.xml.
- Example for heart rate and steps:
<!-- TODO: Required to specify which Health Connect permissions the app can request -->
<uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
<uses-permission android:name="android.permission.health.WRITE_HEART_RATE"/>
<uses-permission android:name="android.permission.health.READ_STEPS"/>
<uses-permission android:name="android.permission.health.WRITE_STEPS"/>
<uses-permission android:name="android.permission.health.READ_EXERCISE"/>
<uses-permission android:name="android.permission.health.WRITE_EXERCISE"/>
<uses-permission android:name="android.permission.health.READ_TOTAL_CALORIES_BURNED"/>
<uses-permission android:name="android.permission.health.WRITE_TOTAL_CALORIES_BURNED"/>
<uses-permission android:name="android.permission.health.READ_WEIGHT"/>
<uses-permission android:name="android.permission.health.WRITE_WEIGHT"/>
<!-- TODO: declare Health Connect visibility -->
<queries>
<package android:name="com.google.android.apps.healthdata" />
</queries>
<!-- TODO: Add intent filter to handle permission rationale intent -->
<!-- Permission handling for Android 13 and before -->
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
<!-- Permission handling for Android 14 and later -->
<intent-filter>
<action android:name="android.intent.action.VIEW_PERMISSION_USAGE"/>
<category android:name="android.intent.category.HEALTH_PERMISSIONS"/>
</intent-filter>
- Tip: Each data type requires explicit read and write permissions.
- Android 14 and above requires an activity-alias for permission rationale.
4. Update MainActivity.kt
- React Native requires a permission delegate:
HealthConnectPermissionDelegate.setPermissionDelegate(this);
- Place it inside onCreate() of MainActivity.
5. Build Configurations
- Minimum SDK version: 26
- Compile SDK version: 35+
minSdkVersion 26
compileSdkVersion 35
6. Using Health Connect in React Native
Request Permissions
import { requestPermission } from "react-native-health-connect";
await requestPermission([
{ accessType: "read", recordType: "Steps" },
{ accessType: "write", recordType: "HeartRate" }
]);
Read Records
import { readRecords } from "react-native-health-connect";
const steps = await readRecords("Steps");
Write Records
import { writeRecords } from "react-native-health-connect";
await writeRecords("HeartRate", [{ value: 72, startTime: new Date() }]);
Tip: Always check if you have permission before reading or writing.
7. Common Issues & Fixes
| Issue | Cause | Solution |
|---|---|---|
| SDK_UNAVAILABLE | Health Connect is not installed | Install Health Connect (for Android 13 and lower) |
| Permission screen not opening | Permission delegate missing | Add the delegate to MainActivity.kt |
| Crash on Android 14 | Missing activity-alias | Add the alias block mentioned above |
| Cannot request permissions again | User denied twice | User must reset permissions in Health Connect settings |
8. Tips & Best Practices
- Test on actual devices; emulators have limited support.
- Encourage users to enable a screen lock.
- Always handle denied permissions in a user-friendly way.
- Consider batching reads and writes to minimize unnecessary API calls.
- Respect user privacy; never send raw health data to outside servers without consent.
9. References
- Official Android Health Connect Documentation
- React Native Health Connect Library
Top comments (0)