Skip to content
CARP Docs
Ask AISystemLightDark
On this page

Data types

Every health data type with its platforms, unit and Google Health Connect read permission, and the types that need care.

Copy MarkdownOpen inOpen in GitHubView as MarkdownOpen in Scira AIOpen in ChatGPTOpen in ClaudeOpen in Cursor

The health plugin 13.3.2 defines 111 values in HealthDataType. It lists 38 of them for Android and 101 for iOS, and 28 for both.

When a health measure starts, CARP Mobile Sensing (CAMS) removes the types that the current platform does not list and logs a warning. One protocol can therefore name types for both platforms.

Android permissions

On Android, each data type needs the read permission of its Google Health Connect record type, declared in the manifest and allowed by the participant. For the permission of each type, see All data types. Some permissions cover several types:

PermissionData types
READ_SLEEPAll sleep types
READ_BLOOD_PRESSUREBLOOD_PRESSURE_SYSTOLIC and BLOOD_PRESSURE_DIASTOLIC
READ_WEIGHT and READ_HEIGHTBODY_MASS_INDEX, which the plugin computes from weight and height
READ_EXERCISEWORKOUT and WORKOUT_ROUTE

For each workout, the plugin also reads the distance, total calories and steps recorded during it, which needs their read permissions. Declare READ_DISTANCE, READ_TOTAL_CALORIES_BURNED and READ_STEPS as well.

To ask the participant for these three permissions, pass DISTANCE_DELTA, TOTAL_CALORIES_BURNED and STEPS to requestHealthPermissions() of the health service manager. Routes that other apps recorded appear only after the participant allows exercise routes for your app in the Health Connect app.

Limitations

The health plugin reads the data types of a measure one after another. When one type fails, the run discards the data of every type in the measure. These types fail on some phones:

  • SKIN_TEMPERATURE fails on Android phones that do not support skin temperature.
  • ATRIAL_FIBRILLATION_BURDEN, SLEEP_WRIST_TEMPERATURE, UNDERWATER_DEPTH, UV_INDEX and WATER_TEMPERATURE need iOS 16.0 or later and fail on iOS 15.
  • TOTAL_CALORIES_BURNED fails on every iPhone.

Known issue

The health plugin lists TOTAL_CALORIES_BURNED for iOS but cannot read it there. On iOS, CAMS keeps the type, its read fails, and the whole measure collects nothing. Leave the type out of protocols that run on iOS, or put it in a task of its own.

Put a type that may fail in a measure of its own, so that its failure does not stop the others. A BackgroundTask keeps only the first measure of each measure type, so give each health measure its own task:

protocol.addTaskControl(
  PeriodicTrigger(period: const Duration(hours: 1)),
  BackgroundTask(
    measures: [
      HealthSamplingPackage.getHealthMeasure([
        HealthDataType.STEPS,
        HealthDataType.HEART_RATE,
      ]),
    ],
  ),
  healthService,
);
protocol.addTaskControl(
  PeriodicTrigger(period: const Duration(hours: 1)),
  BackgroundTask(
    measures: [
      HealthSamplingPackage.getHealthMeasure([HealthDataType.SKIN_TEMPERATURE]),
    ],
  ),
  healthService,
);

A separate task does not help with access on Android. There, the health service reads nothing until the participant allows every data type of every health measure.

On iOS, GENDER, BIRTH_DATE and BLOOD_TYPE are characteristics of the participant, not samples, and they return one data point on every run. See Platform differences.

All data types

NO_UNIT marks values without a unit, such as BODY_MASS_INDEX, and some values in a value class other than NumericHealthValue, such as WORKOUT. For the fields of each value class, see Value classes. For the workout activity types, see Workout types.

The table gives each type's platforms, the unit of its values and its Health Connect read permission, without the android.permission.health. prefix:

Data typeAndroidiOSUnitAndroid permission
ACTIVE_ENERGY_BURNEDYesYesKILOCALORIEREAD_ACTIVE_CALORIES_BURNED
ACTIVITY_INTENSITYYesNoMINUTEREAD_ACTIVITY_INTENSITY
APPLE_MOVE_TIMENoYesSECOND—
APPLE_STAND_HOURNoYesHOUR—
APPLE_STAND_TIMENoYesSECOND—
ATRIAL_FIBRILLATION_BURDENNo16.0 or laterPERCENT—
AUDIOGRAMNoYesDECIBEL_HEARING_LEVEL—
BASAL_ENERGY_BURNEDYesYesKILOCALORIEREAD_BASAL_METABOLIC_RATE
BIRTH_DATENoYesNO_UNIT—
BLOOD_GLUCOSEYesYesMILLIGRAM_PER_DECILITERREAD_BLOOD_GLUCOSE
BLOOD_OXYGENYesYesPERCENTREAD_OXYGEN_SATURATION
BLOOD_PRESSURE_DIASTOLICYesYesMILLIMETER_OF_MERCURYREAD_BLOOD_PRESSURE
BLOOD_PRESSURE_SYSTOLICYesYesMILLIMETER_OF_MERCURYREAD_BLOOD_PRESSURE
BLOOD_TYPENoYesNO_UNIT—
BODY_FAT_PERCENTAGEYesYesPERCENTREAD_BODY_FAT
BODY_MASS_INDEXYesYesNO_UNITREAD_WEIGHT and READ_HEIGHT
BODY_TEMPERATUREYesYesDEGREE_CELSIUSREAD_BODY_TEMPERATURE
BODY_WATER_MASSYesNoKILOGRAMREAD_BODY_WATER_MASS
DIETARY_BIOTINNoYesGRAM—
DIETARY_CAFFEINENoYesGRAM—
DIETARY_CALCIUMNoYesGRAM—
DIETARY_CARBS_CONSUMEDNoYesGRAM—
DIETARY_CHLORIDENoYesGRAM—
DIETARY_CHOLESTEROLNoYesGRAM—
DIETARY_CHROMIUMNoYesGRAM—
DIETARY_COPPERNoYesGRAM—
DIETARY_ENERGY_CONSUMEDNoYesKILOCALORIE—
DIETARY_FATS_CONSUMEDNoYesGRAM—
DIETARY_FAT_MONOUNSATURATEDNoYesGRAM—
DIETARY_FAT_POLYUNSATURATEDNoYesGRAM—
DIETARY_FAT_SATURATEDNoYesGRAM—
DIETARY_FIBERNoYesGRAM—
DIETARY_FOLATENoYesGRAM—
DIETARY_IODINENoYesGRAM—
DIETARY_IRONNoYesGRAM—
DIETARY_MAGNESIUMNoYesGRAM—
DIETARY_MANGANESENoYesGRAM—
DIETARY_MOLYBDENUMNoYesGRAM—
DIETARY_NIACINNoYesGRAM—
DIETARY_PANTOTHENIC_ACIDNoYesGRAM—
DIETARY_PHOSPHORUSNoYesGRAM—
DIETARY_POTASSIUMNoYesGRAM—
DIETARY_PROTEIN_CONSUMEDNoYesGRAM—
DIETARY_RIBOFLAVINNoYesGRAM—
DIETARY_SELENIUMNoYesGRAM—
DIETARY_SODIUMNoYesGRAM—
DIETARY_SUGARNoYesGRAM—
DIETARY_THIAMINNoYesGRAM—
DIETARY_VITAMIN_ANoYesGRAM—
DIETARY_VITAMIN_B12NoYesGRAM—
DIETARY_VITAMIN_B6NoYesGRAM—
DIETARY_VITAMIN_CNoYesGRAM—
DIETARY_VITAMIN_DNoYesGRAM—
DIETARY_VITAMIN_ENoYesGRAM—
DIETARY_VITAMIN_KNoYesGRAM—
DIETARY_ZINCNoYesGRAM—
DISTANCE_CYCLINGNoYesMETER—
DISTANCE_DELTAYesNoMETERREAD_DISTANCE
DISTANCE_SWIMMINGNoYesMETER—
DISTANCE_WALKING_RUNNINGNoYesMETER—
ELECTROCARDIOGRAMNoYesVOLT—
ELECTRODERMAL_ACTIVITYNoYesSIEMEN—
EXERCISE_TIMENoYesMINUTE—
FLIGHTS_CLIMBEDYesYesCOUNTREAD_FLOORS_CLIMBED
FORCED_EXPIRATORY_VOLUMENoYesLITER—
GENDERNoYesNO_UNIT—
HEADACHE_MILDNoYesMINUTE—
HEADACHE_MODERATENoYesMINUTE—
HEADACHE_NOT_PRESENTNoYesMINUTE—
HEADACHE_SEVERENoYesMINUTE—
HEADACHE_UNSPECIFIEDNoYesMINUTE—
HEART_RATEYesYesBEATS_PER_MINUTEREAD_HEART_RATE
HEART_RATE_VARIABILITY_RMSSDYesNoMILLISECONDREAD_HEART_RATE_VARIABILITY
HEART_RATE_VARIABILITY_SDNNNoYesMILLISECOND—
HEIGHTYesYesMETERREAD_HEIGHT
HIGH_HEART_RATE_EVENTNoYesNO_UNIT—
INSULIN_DELIVERYNoYesINTERNATIONAL_UNIT—
IRREGULAR_HEART_RATE_EVENTNoYesNO_UNIT—
LEAN_BODY_MASSYesYesKILOGRAMREAD_LEAN_BODY_MASS
LOW_HEART_RATE_EVENTNoYesNO_UNIT—
MENSTRUATION_FLOWYesYesNO_UNITREAD_MENSTRUATION
MINDFULNESSNoYesMINUTE—
NUTRITIONYesYesNO_UNITREAD_NUTRITION
PERIPHERAL_PERFUSION_INDEXNoYesPERCENT—
RESPIRATORY_RATEYesYesRESPIRATIONS_PER_MINUTEREAD_RESPIRATORY_RATE
RESTING_HEART_RATEYesYesBEATS_PER_MINUTEREAD_RESTING_HEART_RATE
SKIN_TEMPERATUREYesNoDEGREE_CELSIUSREAD_SKIN_TEMPERATURE
SLEEP_ASLEEPYesYesMINUTEREAD_SLEEP
SLEEP_AWAKEYesYesMINUTEREAD_SLEEP
SLEEP_AWAKE_IN_BEDYesNoMINUTEREAD_SLEEP
SLEEP_DEEPYesYesMINUTEREAD_SLEEP
SLEEP_IN_BEDNoYesMINUTE—
SLEEP_LIGHTYesYesMINUTEREAD_SLEEP
SLEEP_OUT_OF_BEDYesNoMINUTEREAD_SLEEP
SLEEP_REMYesYesMINUTEREAD_SLEEP
SLEEP_SESSIONYesNoMINUTEREAD_SLEEP
SLEEP_UNKNOWNYesNoMINUTEREAD_SLEEP
SLEEP_WRIST_TEMPERATURENo16.0 or laterDEGREE_CELSIUS—
SPEEDYesNoMETER_PER_SECONDREAD_SPEED
STEPSYesYesCOUNTREAD_STEPS
TOTAL_CALORIES_BURNEDYesListed, but failsKILOCALORIEREAD_TOTAL_CALORIES_BURNED
UNDERWATER_DEPTHNo16.0 or laterMETER—
UV_INDEXNo16.0 or laterCOUNT—
WAIST_CIRCUMFERENCENoYesMETER—
WALKING_HEART_RATENoYesBEATS_PER_MINUTE—
WALKING_SPEEDNoYesMETER_PER_SECOND—
WATERYesYesLITERREAD_HYDRATION
WATER_TEMPERATURENo16.0 or laterDEGREE_CELSIUS—
WEIGHTYesYesKILOGRAMREAD_WEIGHT
WORKOUTYesYesNO_UNITREAD_EXERCISE
WORKOUT_ROUTEYesYesNO_UNITREAD_EXERCISE

Quick links

Page · DocumentationCARP DocumentationPage · DocumentationIntroductionPage · DocumentationQuickstartPage · DocumentationTerminologyPage · DocumentationArchitecture