Skip to main content

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",
// Required when backgroundAccess is enabled
"android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND",

// 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/data-sync";
import React from "react";
import { ActivityIndicator, Text } from "react-native-paper";

const HealthDataComponent = () => {
return (
<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps", "HeartRate", "Weight"]}
writeIdentifiers={["Weight"]}
backgroundAccess
fallback={<ActivityIndicator />}
>
<Text>You are authorized to access health data</Text>
</DataSync.AndroidHealthConnectAuthorizationProvider>
);
};

export default HealthDataComponent;

Props​

PropTypeDefaultDescription
readIdentifiersRecordType[]requiredArray of Health Connect record types to request read access
writeIdentifiersRecordType[]undefinedArray of Health Connect record types to request write access
backgroundAccessbooleanfalseAlso request Health Connect's background-read permission
fallbackReact.ReactNodeundefinedComponent to render when authorization is pending
childrenReact.ReactNodeundefinedContent to render when authorization is granted
renderManualRequestUI(requestAccess: () => void) => React.ReactNode-Custom UI for manual authorization requests
skipRequestboolean-Skip automatic permission requests
onAuthorizationStatusChange(status) => voidundefinedReceives unknown, shouldRequest, requesting, authorized, refused, or error

onAuthorizationStatusChange lets the app distinguish a permission prompt from a refusal and receive initialization errors:

<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps"]}
onAuthorizationStatusChange={(status) => {
if (status.state === "error") {
console.warn(status.error?.message);
}
}}
>
<HealthDataComponent />
</DataSync.AndroidHealthConnectAuthorizationProvider>

The provider checks permissions again whenever the app returns to the foreground, so granting access in Health Connect settings starts the import without remounting the provider.

skipRequest and renderManualRequestUI are a pair. When backgroundAccess is enabled, a refused background permission is exposed as status.backgroundAccess and does not change an otherwise authorized foreground status.state.

Behavior​

Automatic Mode (Default)​

<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps", "HeartRate", "Weight"]}
writeIdentifiers={["Weight"]}
fallback={<LoadingSpinner />}
>
<HealthDataComponent />
</DataSync.AndroidHealthConnectAuthorizationProvider>

In automatic mode, the component:

  1. Automatically requests permissions when needed
  2. Shows fallback UI while permissions are pending
  3. Renders children when authorized

Manual Authorization Mode​

<DataSync.AndroidHealthConnectAuthorizationProvider
readIdentifiers={["Steps", "HeartRate"]}
skipRequest={false}
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 integration
  • expo-health-connect: Expo plugin for Health Connect configuration