Skip to main content

Permissions

Setting up permissions in React Native CLI template​

To access health data from the Health Connect app in your own app, you need to add the necessary permissions and filters to the app manifest.

  • Add the necessary permissions to AndroidManifest.xml:
android/src/main/AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
+ <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_STEPS"/>
+ <uses-permission android:name="android.permission.health.WRITE_STEPS"/>
</manifest>
  • Create PermissionRationaleActivity.kt
android/app/src/main/java/com/healthconnectexample/PermissionRationaleActivity.kt
package com.healthconnectexample

import android.os.Bundle
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity

class PermissionsRationaleActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

val webView = WebView(this)
webView.webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
return false
}
}

webView.loadUrl("https://developer.android.com/health-and-fitness/guides/health-connect/develop/get-started")

setContentView(webView)
}
}
  • Add the following highlighted code inside the application tag as well:
android/src/main/AndroidManifest.xml
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+ <!-- For supported versions through Android 13, create an activity to show the rationale
+ of Health Connect permissions once users click the privacy policy link. -->
+ <intent-filter>
+ <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
+ </intent-filter>
</activity>

+ <activity
+ android:name=".PermissionsRationaleActivity"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
+ </intent-filter>
+ </activity>
+
+ <!-- For versions starting Android 14, create an activity alias to show the rationale
+ of Health Connect permissions once users click the privacy policy link. -->
+ <activity-alias
+ android:name="ViewPermissionUsageActivity"
+ android:exported="true"
+ android:targetActivity=".MainActivity"
+ android:permission="android.permission.START_VIEW_PERMISSION_USAGE">
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
+ <category android:name="android.intent.category.HEALTH_PERMISSIONS" />
+ </intent-filter>
+ </activity-alias>

Setting up permissions in Expo​

You will need to use EAS Build and Config plugins in your project.

  • Edit app.json and add the permissions you need.
{
"expo": {
...
"android": {
...
"permissions": [
"android.permission.health.READ_STEPS",
"android.permission.health.WRITE_STEPS",
"android.permission.health.READ_ACTIVE_CALORIES_BURNED"
]
},
...
}
}

Complete list of permissions​

Record class typeRead permission declarationWrite permission declaration
ActiveCaloriesBurnedandroid.permission.health.READ_ACTIVE_CALORIES_BURNEDandroid.permission.health.WRITE_ACTIVE_CALORIES_BURNED
BasalBodyTemperatureandroid.permission.health.READ_BASAL_BODY_TEMPERATUREandroid.permission.health.WRITE_BASAL_BODY_TEMPERATURE
BasalMetabolicRateandroid.permission.health.READ_BASAL_METABOLIC_RATEandroid.permission.health.WRITE_BASAL_METABOLIC_RATE
BloodGlucoseandroid.permission.health.READ_BLOOD_GLUCOSEandroid.permission.health.WRITE_BLOOD_GLUCOSE
BloodPressureandroid.permission.health.READ_BLOOD_PRESSUREandroid.permission.health.WRITE_BLOOD_PRESSURE
BodyFatandroid.permission.health.READ_BODY_FATandroid.permission.health.WRITE_BODY_FAT
BodyTemperatureandroid.permission.health.READ_BODY_TEMPERATUREandroid.permission.health.WRITE_BODY_TEMPERATURE
BoneMassandroid.permission.health.READ_BONE_MASSandroid.permission.health.WRITE_BONE_MASS
CervicalMucusandroid.permission.health.READ_CERVICAL_MUCUSandroid.permission.health.WRITE_CERVICAL_MUCUS
CyclingPedalingCadenceandroid.permission.health.READ_EXERCISEandroid.permission.health.WRITE_EXERCISE
Distanceandroid.permission.health.READ_DISTANCEandroid.permission.health.WRITE_DISTANCE
ElevationGainedandroid.permission.health.READ_ELEVATION_GAINEDandroid.permission.health.WRITE_ELEVATION_GAINED
ExerciseSessionandroid.permission.health.READ_EXERCISEandroid.permission.health.WRITE_EXERCISE
FloorsClimbedandroid.permission.health.READ_FLOORS_CLIMBEDandroid.permission.health.WRITE_FLOORS_CLIMBED
HeartRateandroid.permission.health.READ_HEART_RATEandroid.permission.health.WRITE_HEART_RATE
Heightandroid.permission.health.READ_HEIGHTandroid.permission.health.WRITE_HEIGHT
Hydrationandroid.permission.health.READ_HYDRATIONandroid.permission.health.WRITE_HYDRATION
LeanBodyMassandroid.permission.health.READ_LEAN_BODY_MASSandroid.permission.health.WRITE_LEAN_BODY_MASS
MenstruationFlowandroid.permission.health.READ_MENSTRUATIONandroid.permission.health.WRITE_MENSTRUATION
MenstruationPeriodandroid.permission.health.READ_MENSTRUATIONandroid.permission.health.WRITE_MENSTRUATION
MindfulnessSession *android.permission.health.READ_MINDFULNESSandroid.permission.health.WRITE_MINDFULNESS
Nutritionandroid.permission.health.READ_NUTRITIONandroid.permission.health.WRITE_NUTRITION
OvulationTestandroid.permission.health.READ_OVULATION_TESTandroid.permission.health.WRITE_OVULATION_TEST
OxygenSaturationandroid.permission.health.READ_OXYGEN_SATURATIONandroid.permission.health.WRITE_OXYGEN_SATURATION
Powerandroid.permission.health.READ_POWERandroid.permission.health.WRITE_POWER
RespiratoryRateandroid.permission.health.READ_RESPIRATORY_RATEandroid.permission.health.WRITE_RESPIRATORY_RATE
RestingHeartRateandroid.permission.health.READ_RESTING_HEART_RATEandroid.permission.health.WRITE_RESTING_HEART_RATE
SexualActivityandroid.permission.health.READ_SEXUAL_ACTIVITYandroid.permission.health.WRITE_SEXUAL_ACTIVITY
SkinTemperatureandroid.permission.health.READ_SKIN_TEMPERATUREandroid.permission.health.WRITE_SKIN_TEMPERATURE
SleepSessionandroid.permission.health.READ_SLEEPandroid.permission.health.WRITE_SLEEP
Speedandroid.permission.health.READ_SPEEDandroid.permission.health.WRITE_SPEED
StepsCadenceandroid.permission.health.READ_STEPSandroid.permission.health.WRITE_STEPS
Stepsandroid.permission.health.READ_STEPSandroid.permission.health.WRITE_STEPS
TotalCaloriesBurnedandroid.permission.health.READ_TOTAL_CALORIES_BURNEDandroid.permission.health.WRITE_TOTAL_CALORIES_BURNED
Vo2Maxandroid.permission.health.READ_VO2_MAXandroid.permission.health.WRITE_VO2_MAX
Weightandroid.permission.health.READ_WEIGHTandroid.permission.health.WRITE_WEIGHT
WheelchairPushesandroid.permission.health.READ_WHEELCHAIR_PUSHESandroid.permission.health.WRITE_WHEELCHAIR_PUSHES
WriteExerciseRouteandroid.permission.health.WRITE_EXERCISE_ROUTEN/A

You can read more about data types and permissions here.

MindfulnessSession is experimental

* MindfulnessSession is still marked experimental by Health Connect — it is guarded by ExperimentalMindfulnessSessionApi as of connect-client:1.1.0. Its permissions, fields and session types may change in a future Health Connect release, and it may not be available on every device or Health Connect version.

Special Permissions​

In addition to the standard record type permissions, Health Connect provides special permissions for specific functionality:

Background Access Permission​

This permission allows your app to read health data in the background, even when your app is not in the foreground.

First, add the background access permission to your AndroidManifest.xml:

<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND"/>

Then, request the permission in your app:

// Request background access permission
requestPermission([
{
accessType: 'read',
recordType: 'BackgroundAccessPermission',
},
// Other permissions...
]);

Under the hood, this maps to HealthPermission.PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND in the Android Health Connect API.

See the Background Access Permission documentation for more details.

Exercise Route Permission​

This special permission is required to write exercise routes:

requestPermission([
{
accessType: 'write',
recordType: 'ExerciseRoute',
},
// Other permissions...
]);