DEV Community

Tapan Kumar Swain
Tapan Kumar Swain

Posted on

Integrating Health Connect in Android + React Native Apps

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();
Enter fullscreen mode Exit fullscreen mode

2. Add SDK Dependency

Add the following in app/build.gradle:

dependencies {
    implementation "androidx.health.connect:connect-client:1.1.0-alpha11"
}
Enter fullscreen mode Exit fullscreen mode

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"/>
Enter fullscreen mode Exit fullscreen mode
<!-- TODO: declare Health Connect visibility -->
<queries>
   <package android:name="com.google.android.apps.healthdata" />
</queries>
Enter fullscreen mode Exit fullscreen mode
<!-- 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>
Enter fullscreen mode Exit fullscreen mode
  • 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);
Enter fullscreen mode Exit fullscreen mode
  • Place it inside onCreate() of MainActivity.

5. Build Configurations

  • Minimum SDK version: 26
  • Compile SDK version: 35+
minSdkVersion 26
compileSdkVersion 35
Enter fullscreen mode Exit fullscreen mode

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" }
]);
Enter fullscreen mode Exit fullscreen mode

Read Records

import { readRecords } from "react-native-health-connect";
const steps = await readRecords("Steps");
Enter fullscreen mode Exit fullscreen mode

Write Records

import { writeRecords } from "react-native-health-connect";
await writeRecords("HeartRate", [{ value: 72, startTime: new Date() }]);
Enter fullscreen mode Exit fullscreen mode

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

Top comments (0)