Skip to content
AF
Troubleshooting

Health Connect SDK_UNAVAILABLE and SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED: What Each Status Means

Last verified October 3, 2026 · 4 min read

Sources checked (4) · October 3, 2026
HealthConnectClient.getSdkStatus returns one of three constants. Google documents SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED (value 2) as "the provider is either not installed or needs to be updated", so send the user to the Health Connect listing on the Play Store. SDK_UNAVAILABLE (value 1) means the SDK is unavailable on the device, for example because the Android version is too low, and Google says to hide every Health Connect entry point. Only SDK_AVAILABLE (value 3) means you can call getOrCreate.

Covered here:Health Connect

HealthConnectClient.getSdkStatus(context) came back with something other than SDK_AVAILABLE, or your log shows a bare 1 or 2 where you expected a client. Those numbers are the status constants. Android's Jetpack HealthConnectClient reference (fetched October 3, 2026) defines exactly three, and each one asks for a different response.

The three statuses, in Google's words#

ConstantValueGoogle's descriptionWhat Google says to do
SDK_UNAVAILABLE1"The Health Connect SDK is unavailable on this device at the time. This can be due to the device running a lower than required Android Version.""Apps should hide any integration points to Health Connect in this case."
SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED2"The Health Connect SDK APIs are currently unavailable, the provider is either not installed or needs to be updated.""Apps may choose to redirect to package installers to find a suitable APK."
SDK_AVAILABLE3"The Health Connect SDK APIs are available.""Apps can subsequently call getOrCreate to get an instance of HealthConnectClient."

All three are marked "Added in 1.1.0" in the reference. If you log the raw integer, 2 means "install or update Health Connect", not "unsupported".

Why the device is unavailable#

Google's availability page sets the floor: "Health Connect requires a mobile device running Android 9 (API 28) or higher with Google Play services installed." On Android 14 and higher, Health Connect is part of the system and is accessible in Settings. On Android 13 and lower, it is a publicly available app on the Google Play Store, and that is where "not installed or needs to be updated" comes from.

Two further rules from Google that produce an unavailable device:

  • Android 8. Google's get-started guide notes that "the Health Connect SDK supports Android 8 (API level 26) or higher, while the Health Connect app is only compatible with Android 9 (API level 28) or higher." Your app can install on Android 8. Health Connect cannot run there.
  • Work profiles. Google says "Health Connect is not supported on devices with work profiles. While users might be able to grant permissions in the work profile, the Health Connect APIs won't be usable, and no data will be written."

Why getOrCreate crashes when you skip the check#

The reference lists what getOrCreate throws if you call it on a device that is not ready: UnsupportedOperationException "if service not available due to SDK version too low or running in a profile", and IllegalStateException "if the SDK is not available". Calling getSdkStatus first turns a crash into a branch.

The fix, per status#

Google's get-started guide also asks you to declare the Health Connect package in your manifest before you get a client, so check this first:

<queries>
    <package android:name="com.google.android.apps.healthdata" />
</queries>

Then branch on the status. The update-required branch below follows the sample in Google's reference, which sends the user to the Play Store's Health Connect listing with an onboarding hand-off:

val providerPackageName = "com.google.android.apps.healthdata"

when (HealthConnectClient.getSdkStatus(context, providerPackageName)) {
    HealthConnectClient.SDK_AVAILABLE -> {
        val client = HealthConnectClient.getOrCreate(context)
        // proceed: check permissions, then read
    }
    HealthConnectClient.SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED -> {
        val uriString =
            "market://details?id=$providerPackageName&url=healthconnect%3A%2F%2Fonboarding"
        context.startActivity(
            Intent(Intent.ACTION_VIEW).apply {
                setPackage("com.android.vending")
                data = Uri.parse(uriString)
                putExtra("overlay", true)
                putExtra("callerId", context.packageName)
            }
        )
    }
    else -> {
        // SDK_UNAVAILABLE: hide every Health Connect entry point
    }
}

One inconsistency to know about: the user-facing text in Google's get-started sample for SDK_UNAVAILABLE asks the user to "ensure it is installed and updated", while the reference says to hide integration points for that status. We follow the reference. An install prompt belongs to the update-required status, and on an unavailable device it only sends the user looking for an app their phone cannot run.

SDK_AVAILABLE is not the same as every feature available#

A device can report SDK_AVAILABLE and still lack newer capabilities. Google's feature availability guide says "When new features are added to Health Connect, users may not always update their version of Health Connect," and gives getFeatureStatus on healthConnectClient.features, which returns FEATURE_STATUS_AVAILABLE or FEATURE_STATUS_UNAVAILABLE. Check it for features such as FEATURE_READ_HEALTH_DATA_IN_BACKGROUND and FEATURE_READ_HEALTH_DATA_HISTORY before requesting their permissions.

Treat status as something that changes#

Our recommendation: call getSdkStatus each time the user reaches a Health Connect feature, not once at install. On Android 13 and lower, Health Connect is a separate Play Store app, so its state can change after your app checked it. On Android 14 Google says it is part of the system and cannot be uninstalled. A user who updates Health Connect from the Play Store should find your feature working the next time they open it, without reinstalling your app.

Where to go next#

Once the status is SDK_AVAILABLE and reads are still empty, work through Health Connect returns no data. If calls throw after the client exists, see Health Connect SecurityException. The end-to-end setup is in the Google Health Connect integration guide.

Frequently asked questions

What do the numbers 1, 2 and 3 from getSdkStatus mean?
They are the three status constants in Android's Jetpack HealthConnectClient reference. 1 is SDK_UNAVAILABLE, meaning Health Connect is unavailable on the device. 2 is SDK_UNAVAILABLE_PROVIDER_UPDATE_REQUIRED, meaning the provider is not installed or needs an update. 3 is SDK_AVAILABLE, meaning you can call getOrCreate. Compare against the named constants rather than the integers.
Why does HealthConnectClient.getOrCreate crash instead of returning a client?
Because the device is not ready and nothing checked first. Android's reference says getOrCreate throws UnsupportedOperationException if the service is not available due to an SDK version that is too low or running in a profile, and IllegalStateException if the SDK is not available. Call getSdkStatus first and only call getOrCreate on SDK_AVAILABLE.
Can Health Connect work inside an Android work profile?
No. Google's availability page says Health Connect is not supported on devices with work profiles. Users may be able to grant permissions in the work profile, but the APIs won't be usable and no data will be written, because the work profile is never considered to be in the foreground. Plan for this if your users are on managed Google Workspace devices.
Does SDK_AVAILABLE mean every Health Connect feature works?
No. SDK_AVAILABLE means the core APIs are usable. Google's feature availability guide notes that users may not always update Health Connect, so newer capabilities such as background reads or reading history need their own getFeatureStatus check, which returns FEATURE_STATUS_AVAILABLE or FEATURE_STATUS_UNAVAILABLE, before you request their permissions.

All 124 questions in Troubleshooting →

Keep reading

Elsewhere on the site

Pages that share this one’s concepts and sources, from other sections.

Next steps

Was this page useful?

Independent comparison, last reviewed October 3, 2026. Pricing, rate limits, and feature availability change often — confirm current details in each provider’s official documentation before you commit. Product and company names are trademarks of their respective owners; AIFitnessAPI is not affiliated with, endorsed by, or sponsored by any product listed here.

← All troubleshooting · by AIFitnessAPI