Android 13 和 Wear OS 4 引入了一种方法,允许应用从后台访问身体传感器,例如心率。此新访问模型类似于在 Android 10(API 级别 29)中引入后台位置访问权限 的模型。
如果您的应用需要在后台访问身体传感器信息,例如在后台监控健康服务数据 时,则必须请求BODY_SENSORS_BACKGROUND
权限。
如隐私最佳实践 页面所述,应用应仅在BODY_SENSORS_BACKGROUND
权限对用户界面功能至关重要时才请求此权限,并且应向用户妥善披露这一点。
授予权限的过程取决于您的应用的目标 SDK 版本。
应用的目标 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">
然后,您的应用必须在单独的操作中请求这些权限
- 检查
BODY_SENSORS
是否已授予。如果未授予,则请求该权限。 - 检查
BODY_SENSORS_BACKGROUND
是否已授予。如果未授予,则请求该权限。
注意:如果您的应用同时请求身体传感器权限,系统将忽略该请求,并且不会授予您的应用任何权限。
在 Android 13(API 级别 33)及更高版本上,运行时权限对话框不包含“始终允许”选项。相反,用户必须从系统设置中启用始终允许的后台传感器访问权限,如图 1 所示。在授予BODY_SENSORS
权限后请求BODY_SENSORS_BACKGROUND
权限时,您可以帮助用户导航到此设置页面。如果用户拒绝始终允许访问权限,则他们应该能够继续使用您的应用。
应用的目标 SDK 版本为早期版本
当您的应用面向 Android 13 之前的 Android 版本时,请求 BODY_SENSORS
权限后不会自动授予后台访问权限。相反,用户会看到一个系统对话框,邀请他们导航到您的应用的传感器权限设置,如图 2 所示。然后,用户必须在该设置页面上启用后台传感器使用。
用户可以拒绝后台访问权限。这与在您的应用在后台运行时撤销 BODY_SENSORS
权限的效果相同。当应用在没有后台访问权限的情况下使用 PassiveMonitoringClient
并进入后台时,应用会失去 BODY_SENSORS
权限,并且会调用 onPermissionLost()
回调。出于这些原因,遵循请求运行时权限的最佳实践尤其重要。