Android
The plugin uses Google Health Connect on Android. Health Connect may not be preinstalled. At runtime, check availability and guide the user if needed:
final status = await health.getHealthConnectSdkStatus();final available = await health.isHealthConnectAvailable();if (!available) { await health.installHealthConnect();}Permissions in AndroidManifest
Section titled “Permissions in AndroidManifest”Add required permissions based on the types you read/write. Start from this baseline (from the example app) and trim to your needs:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- Health Connect permissions (add those you need) --> <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_WEIGHT"/> <uses-permission android:name="android.permission.health.WRITE_WEIGHT"/> <uses-permission android:name="android.permission.health.READ_HEIGHT"/> <uses-permission android:name="android.permission.health.WRITE_HEIGHT"/> <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_EXERCISE"/> <uses-permission android:name="android.permission.health.WRITE_EXERCISE"/> <uses-permission android:name="android.permission.health.READ_SLEEP"/> <uses-permission android:name="android.permission.health.WRITE_SLEEP"/> <uses-permission android:name="android.permission.health.READ_SPEED"/> <uses-permission android:name="android.permission.health.WRITE_SPEED"/> <uses-permission android:name="android.permission.health.READ_DISTANCE"/> <uses-permission android:name="android.permission.health.WRITE_DISTANCE"/> <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_ACTIVE_CALORIES_BURNED"/> <uses-permission android:name="android.permission.health.WRITE_ACTIVE_CALORIES_BURNED"/> <uses-permission android:name="android.permission.health.READ_BLOOD_GLUCOSE"/> <uses-permission android:name="android.permission.health.WRITE_BLOOD_GLUCOSE"/> <uses-permission android:name="android.permission.health.READ_BLOOD_PRESSURE"/> <uses-permission android:name="android.permission.health.WRITE_BLOOD_PRESSURE"/> <uses-permission android:name="android.permission.health.READ_BODY_FAT"/> <uses-permission android:name="android.permission.health.WRITE_BODY_FAT"/> <uses-permission android:name="android.permission.health.READ_BODY_TEMPERATURE"/> <uses-permission android:name="android.permission.health.WRITE_BODY_TEMPERATURE"/> <uses-permission android:name="android.permission.health.READ_OXYGEN_SATURATION"/> <uses-permission android:name="android.permission.health.WRITE_OXYGEN_SATURATION"/> <uses-permission android:name="android.permission.health.READ_HYDRATION"/> <uses-permission android:name="android.permission.health.WRITE_HYDRATION"/> <uses-permission android:name="android.permission.health.READ_RESTING_HEART_RATE"/> <uses-permission android:name="android.permission.health.WRITE_RESTING_HEART_RATE"/> <uses-permission android:name="android.permission.health.READ_FLOORS_CLIMBED"/> <uses-permission android:name="android.permission.health.WRITE_FLOORS_CLIMBED"/> <uses-permission android:name="android.permission.health.READ_BASAL_METABOLIC_RATE"/> <uses-permission android:name="android.permission.health.WRITE_BASAL_METABOLIC_RATE"/> <uses-permission android:name="android.permission.health.READ_RESPIRATORY_RATE"/> <uses-permission android:name="android.permission.health.WRITE_RESPIRATORY_RATE"/> <uses-permission android:name="android.permission.health.READ_NUTRITION"/> <uses-permission android:name="android.permission.health.WRITE_NUTRITION"/> <uses-permission android:name="android.permission.health.READ_HEART_RATE_VARIABILITY"/> <uses-permission android:name="android.permission.health.WRITE_HEART_RATE_VARIABILITY"/> <uses-permission android:name="android.permission.health.BODY_SENSORS"/> <uses-permission android:name="android.permission.health.READ_MENSTRUATION"/> <uses-permission android:name="android.permission.health.WRITE_MENSTRUATION"/> <uses-permission android:name="android.permission.health.READ_LEAN_BODY_MASS"/> <uses-permission android:name="android.permission.health.WRITE_LEAN_BODY_MASS"/>
<!-- Historic and background reading (optional) --> <uses-permission android:name="android.permission.health.READ_HEALTH_DATA_HISTORY"/> <uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND"/></manifest>Also include the intent-filters from the example to enable the Health Connect permission UI.
Runtime permissions
Section titled “Runtime permissions”When using activity-related data (steps, workouts), request ACTIVITY_RECOGNITION and optionally ACCESS_FINE_LOCATION/ACCESS_COARSE_LOCATION for distance in workouts.
import 'package:permission_handler/permission_handler.dart';
await Permission.activityRecognition.request();await Permission.location.request();History & background
Section titled “History & background”isHealthDataHistoryAvailable()/requestHealthDataHistoryAuthorization()isHealthDataInBackgroundAvailable()/requestHealthDataInBackgroundAuthorization()
Use these to detect and request capabilities on devices that support them.