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",

// 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

PropTypeDefaultDescription
readIdentifiersRecordType[]requiredArray of Health Connect record types to request read access
writeIdentifiersRecordType[]undefinedArray of Health Connect record types to request write access
fallbackReact.ReactNodeundefinedComponent to render when authorization is pending
childrenReact.ReactNoderequiredContent to render when authorization is granted
renderManualRequestUI(requestAccess: () => void) => React.ReactNodeundefinedCustom UI for manual authorization requests
skipRequestbooleanundefinedSkip 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:

  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={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 integration
  • expo-health-connect: Expo plugin for Health Connect configuration