请求后台访问身体传感器数据

Android 13 和 Wear OS 4 引入了一种让应用从后台访问身体传感器(如心率)的方式。这种新的访问模式类似于在 Android 10 (API level 29) 中引入的后台位置信息访问

如果您的应用需要在后台访问身体传感器信息,例如在 后台监控健康服务数据 时,您必须请求 BODY_SENSORS_BACKGROUND 权限。

隐私最佳实践页面所述,应用只有在用户可见功能至关重要时才应请求 BODY_SENSORS_BACKGROUND 权限,并且应妥善向用户披露这一点。

授予权限的过程取决于您的应用的目标 SDK 版本。

应用目标为 Android 13 或更高版本

除了现有的 BODY_SENSORS 权限外,还在您的清单文件中声明 BODY_SENSORS_BACKGROUND 权限

<uses-permission android:name="android.permission.BODY_SENSORS">
<uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND">

然后,您的应用必须在单独的操作中请求这些权限

  1. 检查是否已授予 BODY_SENSORS 权限。如果未授予,则请求此权限。
  2. 检查是否已授予 BODY_SENSORS_BACKGROUND 权限。如果未授予,则请求此权限。
The all-the-time option is the first list item on the settings screen
图 1. 传感器设置中包含一个名为“始终允许”的选项,用于授予后台传感器数据访问权限。

警告:如果您的应用同时请求这两项身体传感器权限,系统会忽略该请求,并且不会授予您的应用任何一项权限。

在 Android 13 (API level 33) 及更高版本上,运行时权限对话框不包含“始终允许”选项。相反,用户必须从系统设置中启用“始终允许”后台传感器访问,如图 1 所示。在授予 BODY_SENSORS 权限后,当您请求 BODY_SENSORS_BACKGROUND 权限时,您可以帮助用户导航到此设置页面。如果用户拒绝“始终允许”访问,他们应该能够继续使用您的应用。

应用目标为更早版本

The link text is 'go to settings'
图 2. 权限对话框中包含一个链接,可引导用户导航到应用的传感器权限系统设置。

当您的应用目标为 Android 13 之前的版本时,在您请求 BODY_SENSORS 权限时,系统不会自动授予后台访问权限。相反,用户会看到一个系统对话框,邀请他们导航到您应用的传感器权限设置,如图 2 所示。然后,用户必须在该设置页面上启用后台传感器使用权限。

用户可以拒绝后台访问。这与您的应用在后台运行时撤销 BODY_SENSORS 权限具有相同的效果。当应用在没有后台访问权限的情况下使用 PassiveMonitoringClient 并进入后台时,应用会失去 BODY_SENSORS 权限,并且会调用 onPermissionLost() 回调。出于这些原因,遵循请求运行时权限的最佳实践尤为重要。