Android 13 and Wear OS 4 introduce a way for apps to access body sensors, such as heart rate, from the background. This new access model is similar to the one that introduced background location access in Android 10 (API level 29).
If your app needs to access body sensor information in background, such as when
monitoring Health Services data in the background, you must request the
BODY_SENSORS_BACKGROUND
permission.
As described on the privacy best practices page, apps should only ask for
the BODY_SENSORS_BACKGROUND
permission when it is critical to the user-facing
feature, and they should properly disclose this to users.
The process for granting the permission depends on your app's target SDK version.
App targets Android 13 or higher
In addition to the existing BODY_SENSORS
permission, declare the
BODY_SENSORS_BACKGROUND
permission in your manifest file:
<uses-permission android:name="android.permission.BODY_SENSORS">
<uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND">
Then, your app must request the permissions in separate operations:
- Check if
BODY_SENSORS
is granted. If not, request the permission. - Check if
BODY_SENSORS_BACKGROUND
is granted. If not, request the permission.
Caution: If your app requests both body sensor permissions at the same time, the system ignores the request and doesn't grant your app either permission.
On Android 13 (API level 33) and higher, the runtime permission dialog doesn't
include the "Allow all the time" option. Instead, users must enable all-the-time
background sensor access from system settings, as shown in figure 1. When you
request the BODY_SENSORS_BACKGROUND
permission after granting the
BODY_SENSORS
permission, you can help users navigate to this settings page. If
users decline all-the-time access, they should be able to continue using your
app.
App targets an earlier version
When your app targets a version of Android earlier than Android 13, background
access isn't granted automatically when you request the BODY_SENSORS
permission. Instead, users see a system dialog that invites users to navigate to
your app's sensor permission settings, as shown in figure 2. Then, users must
enable background sensor usage on that settings page.
Users can decline the background access. It has the same effect as revoking the
BODY_SENSORS
permission while your app is running in the background. When an
app is using PassiveMonitoringClient
without background access permission
and goes into the background, the app loses the BODY_SENSORS
permission, and
the onPermissionLost()
callback is called. For these reasons, it's
especially important that you follow best practices for requesting runtime
permissions.