diff --git a/core/api/current.txt b/core/api/current.txt
index 5656c31c330af..e916bde7d47a3 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -61,6 +61,7 @@ package android {
field public static final String BLUETOOTH_PRIVILEGED = "android.permission.BLUETOOTH_PRIVILEGED";
field public static final String BLUETOOTH_SCAN = "android.permission.BLUETOOTH_SCAN";
field public static final String BODY_SENSORS = "android.permission.BODY_SENSORS";
+ field public static final String BODY_SENSORS_BACKGROUND = "android.permission.BODY_SENSORS_BACKGROUND";
field public static final String BROADCAST_PACKAGE_REMOVED = "android.permission.BROADCAST_PACKAGE_REMOVED";
field public static final String BROADCAST_SMS = "android.permission.BROADCAST_SMS";
field public static final String BROADCAST_STICKY = "android.permission.BROADCAST_STICKY";
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 5781b1edd2427..075329b0e5f45 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1481,8 +1481,26 @@
android:permissionGroup="android.permission-group.UNDEFINED"
android:label="@string/permlab_bodySensors"
android:description="@string/permdesc_bodySensors"
+ android:backgroundPermission="android.permission.BODY_SENSORS_BACKGROUND"
android:protectionLevel="dangerous" />
+
+
+
- Allows the app to access data from sensors
- that monitor your physical condition, such as your heart rate.
+ Access to data from body sensors such as heart rate, temperature, blood oxygen percentage, etc.
+
+ access body sensors (like heart rate monitors) while in the background
+
+ Access to data from body sensors such as heart rate, temperature, blood oxygen percentage, etc. while in the background.
Read calendar events and details
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 756425eedabba..9f4e1955cafde 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -222,6 +222,10 @@
targetSdk="29">
+
+
+
diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
index ece0a62b78774..297ea75152c85 100644
--- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
@@ -198,6 +198,7 @@ final class DefaultPermissionGrantPolicy {
private static final Set SENSORS_PERMISSIONS = new ArraySet<>();
static {
SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS);
+ SENSORS_PERMISSIONS.add(Manifest.permission.BODY_SENSORS_BACKGROUND);
}
private static final Set STORAGE_PERMISSIONS = new ArraySet<>();
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
index 3855e655fb278..8e7622d910698 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -5914,7 +5914,8 @@ public class PermissionManagerService extends IPermissionManager.Stub {
if (op < 0) {
// Bg location is one-off runtime modifier permission and has no app op
if (sPlatformPermissions.contains(permission)
- && !Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(permission)) {
+ && !Manifest.permission.ACCESS_BACKGROUND_LOCATION.equals(permission)
+ && !Manifest.permission.BODY_SENSORS_BACKGROUND.equals(permission)) {
Slog.wtf(LOG_TAG, "Platform runtime permission " + permission
+ " with no app op defined!");
}