AndroidHealthConnectAuthorizationProvider
A React component that handles authorization and permission management for Android Health Connect, providing access to health data on Android devices.
Overview
The AndroidHealthConnectAuthorizationProvider component manages the complex flow of requesting, checking, and maintaining permissions for Android Health Connect. It provides a declarative way to handle health data authorization and can render different UI states based on the authorization status.
Features
- Permission Management: Handles both read and write permissions for Android Health Connect
- Automatic Initialization: Automatically initializes Health Connect SDK
- Flexible UI States: Support for automatic requests, manual authorization UI, or fallback components
- Status Tracking: Real-time authorization status monitoring
- Error Handling: Graceful handling of permission errors and SDK initialization failures
Prerequisites
Before using this component, ensure you have the required permissions configured in your app.config.ts:
// app.config.ts
export default {
android: {
permissions: [
// Health Connect Read Permissions
"android.permission.health.READ_BODY_TEMPERATURE",
"android.permission.health.READ_WEIGHT",
"android.permission.health.READ_OXYGEN_SATURATION",
"android.permission.health.READ_STEPS",
"android.permission.health.READ_RESTING_HEART_RATE",
"android.permission.health.READ_HEART_RATE_VARIABILITY",
"android.permission.health.READ_HEART_RATE",
"android.permission.health.READ_RESPIRATORY_RATE",
"android.permission.health.READ_VO2_MAX",
// Health Connect Write Permissions (optional)
"android.permission.health.WRITE_WEIGHT",
"android.permission.health.WRITE_BODY_TEMPERATURE",
"android.permission.health.WRITE_OXYGEN_SATURATION",
"android.permission.health.WRITE_STEPS",
"android.permission.health.WRITE_RESTING_HEART_RATE",
"android.permission.health.WRITE_HEART_RATE_VARIABILITY",
"android.permission.health.WRITE_HEART_RATE",
"android.permission.health.WRITE_RESPIRATORY_RATE",
"android.permission.health.WRITE_VO2_MAX",
],
},
plugins: [
"expo-health-connect", // Required plugin
[
"expo-build-properties",
{
android: {
compileSdkVersion: 35,
targetSdkVersion: 35,
minSdkVersion: 26,
},
},
],
],
};
Basic Usage
import { DataSync } from "@ovok/native";
import React from "react";
import { ActivityIndicator, Text } from "react-native-paper";
const HealthDataComponent = () => {
return (
<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps", "HeartRate", "Weight"]}
writeIdentifiers={["Weight"]}
fallback={<ActivityIndicator />}
>
<Text>You are authorized to access health data</Text>
</DataSync.AndroidHealthConnectAuthorizationProvider>
);
};
export default HealthDataComponent;
Props
| Prop | Type | Default | Description |
|---|---|---|---|
readIdentifiers | RecordType[] | required | Array of Health Connect record types to request read access |
writeIdentifiers | RecordType[] | undefined | Array of Health Connect record types to request write access |
fallback | React.ReactNode | undefined | Component to render when authorization is pending |
children | React.ReactNode | required | Content to render when authorization is granted |
renderManualRequestUI | (requestAccess: () => void) => React.ReactNode | undefined | Custom UI for manual authorization requests |
skipRequest | boolean | undefined | Skip automatic permission requests (requires manual UI) |
Behavior
Automatic Mode (Default)
<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps", "HeartRate", "Weight"]}
writeIdentifiers={["Weight"]}
fallback={<LoadingSpinner />}
>
<HealthDataComponent />
</DataSync.AndroidHealthConnectAuthorizationProvider>
In automatic mode, the component:
- Automatically requests permissions when needed
- Shows fallback UI while permissions are pending
- Renders children when authorized
Manual Authorization Mode
<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps", "HeartRate"]}
skipRequest={true}
renderManualRequestUI={(requestAccess) => (
<DataSync.ManuallyRequestSheet>
<DataSync.ManuallyRequestSheet.Container>
<DataSync.ManuallyRequestSheet.Title>
Health Data Access
</DataSync.ManuallyRequestSheet.Title>
<DataSync.ManuallyRequestSheet.Description>
Grant access to your health data for personalized insights
</DataSync.ManuallyRequestSheet.Description>
<DataSync.ManuallyRequestSheet.RequestButton onPress={requestAccess}>
Grant Access
</DataSync.ManuallyRequestSheet.RequestButton>
</DataSync.ManuallyRequestSheet.Container>
</DataSync.ManuallyRequestSheet>
)}
>
<HealthDataComponent />
</DataSync.AndroidHealthConnectAuthorizationProvider>
Platform Compatibility
- Android Only: This component only works on Android devices
- Health Connect: Requires Android Health Connect app to be installed
- API Level: Requires Android API level 26+ (Android 8.0+)
- SDK Version: Compatible with Health Connect SDK 1.0+
Dependencies
react-native-health-connect: Android Health Connect integrationexpo-health-connect: Expo plugin for Health Connect configuration
Related Components
AppleHealthAuthorizationProvider: iOS equivalent for HealthKitAndroidHealthSync: Data synchronization componentManuallyRequestSheet: UI component for manual authorization