This library is a wrapper around Health Connect for react native. Health Connect is an Android API and platform. It unifies data from multiple devices and apps into an ecosystem. For Android developers, it provides a single interface for reading and writing a user’s health and fitness data. For Android users, it offers a place for control over which apps have read and/or write access to different types of data. Health Connect also provides on-device storage. Read more here.
Make sure you have React Native version 0.71 or higher with the latest patch installed to use v2 of React Native Health Connect.
minSdkVersion=26
(Android Oreo / 8.0).To install react-native-health-connect, use the following command:
npm install react-native-health-connect
If you are using React Native CLI template, for version 2 onwards, please add the following code into your MainActivity.kt
within the onCreate
method:
package com.healthconnectexample
+ import android.os.Bundle
import com.facebook.react.ReactActivity
import com.facebook.react.ReactActivityDelegate
import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
import com.facebook.react.defaults.DefaultReactActivityDelegate
+ import dev.matinzd.healthconnect.permissions.HealthConnectPermissionDelegate
class MainActivity : ReactActivity() {
/**
* Returns the name of the main component registered from JavaScript. This is used to schedule
* rendering of the component.
*/
override fun getMainComponentName(): String = "HealthConnectExample"
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ // In order to handle permission contract results, we need to set the permission delegate.
+ HealthConnectPermissionDelegate.setPermissionDelegate(this)
+ }
/**
* Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
* which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
*/
override fun createReactActivityDelegate(): ReactActivityDelegate =
DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
}
You also need to setup permissions in your AndroidManifest.xml
file. For more information, check here.
This package cannot be used in the Expo Go app, but it can be used with custom managed apps.
Just add the config plugin to the plugins
array of your app.json
or app.config.js
:
First install the package with yarn, npm, or expo install
.
npm install expo-health-connect
npm install expo-build-properties --save-dev
Then add the prebuild config plugin to the plugins
array of your app.json
or app.config.js
:
{
"expo": {
"plugins": ["expo-health-connect"]
}
}
{
"expo": {
...
"plugins": [
[
"expo-build-properties",
{
"android": {
"compileSdkVersion": 34,
"targetSdkVersion": 34,
"minSdkVersion": 26
},
}
]
]
...
}
}
Then rebuild the native app:
expo prebuild
yarn android
-- Build on Android.If the project doesn't build correctly with
yarn android
, please file an issue and try setting the project up manually.
Finally create a new EAS development build
eas build --profile development --platform android
A quick example at a glance:
import {
initialize,
requestPermission,
readRecords,
} from 'react-native-health-connect';
const readSampleData = async () => {
// initialize the client
const isInitialized = await initialize();
// request permissions
const grantedPermissions = await requestPermission([
{ accessType: 'read', recordType: 'ActiveCaloriesBurned' },
]);
// check if granted
const result = await readRecords('ActiveCaloriesBurned', {
timeRangeFilter: {
operator: 'between',
startTime: '2023-01-09T12:00:00.405Z',
endTime: '2023-01-09T23:53:15.405Z',
},
});
// {
// result: [
// {
// startTime: '2023-01-09T12:00:00.405Z',
// endTime: '2023-01-09T23:53:15.405Z',
// energy: {
// inCalories: 15000000,
// inJoules: 62760000.00989097,
// inKilojoules: 62760.00000989097,
// inKilocalories: 15000,
// },
// metadata: {
// id: '239a8cfd-990d-42fc-bffc-c494b829e8e1',
// lastModifiedTime: '2023-01-17T21:06:23.335Z',
// clientRecordId: null,
// dataOrigin: 'com.healthconnectexample',
// clientRecordVersion: 0,
// device: 0,
// },
// },
// ],
// }
};
For iOS there are two alteranatives you can use which is very similar to Health Connect on Android. First one is @kingstinct/react-native-healthkit and the other one is react-native-health. These options are similar in functionality and can help you manage your health data on iOS.
More examples and full documentation can be found here
MIT