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).
As described on the privacy best practices page, apps should only ask for
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:
Then, your app must request the permissions in separate operations:
- Check if
BODY_SENSORSis granted. If not, request the permission.
- Check if
BODY_SENSORS_BACKGROUNDis 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
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 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
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
onPermissionLost() callback is called. For these reasons, it's
especially important that you follow best practices for requesting runtime