keywords: wear, permissions, collection_guideslandingwear image_path: images/training/wear/multiple_permissions.png
在 Wear OS 上请求权限与在移动应用中请求权限类似,但有一些额外的用例。本文档假设您了解 Android 权限的工作原理。如果您不了解,请查看 Android 权限的工作原理。
就像在移动应用中一样,用户必须授予 Wear 应用权限才能访问某些功能。在您的 Wear 应用中,在不请求任何权限的情况下提供有意义的功能。
权限场景
在 Wear OS 上请求危险权限时,您可能会遇到以下几种场景:
Wear 应用请求在可穿戴设备上运行的应用的权限。
Wear 应用请求在手机上运行的应用的权限。
手机应用请求在可穿戴设备上运行的应用的权限。
手机应用请求多个权限,这些权限仅在可穿戴设备连接时才可以使用。
要在实际运行的应用中查看所有这些场景,请查看 GitHub 上的 ExerciseSampleCompose 示例。
以下各节将解释这些场景。有关请求权限的更详细信息,请参阅权限请求模式部分。
Wear 应用请求可穿戴设备权限
当 Wear 应用请求在可穿戴设备上运行的应用的权限时,系统会显示一个对话框提示用户授予该权限。在您的应用中,仅当用户清楚地知道执行给定操作需要这些权限时才请求权限。
查看权限原则,确保您为用户提供最佳体验,并记住检查 shouldShowRequestPermissionRationale()
并根据需要提供额外信息。
如果应用或表盘一次需要多个权限,权限请求会一个接一个地出现。

Wear 应用请求手机权限
当 Wear 应用请求手机权限(例如,可穿戴应用想要访问手机版应用中的照片或其他敏感数据)时,Wear 应用必须将用户发送到手机以接受权限。在那里,手机应用可以使用 Activity 向用户提供额外信息。在该 Activity 中,包含两个按钮:一个用于授予权限,一个用于拒绝权限。

手机应用请求可穿戴设备权限
如果用户正在使用手机应用,并且该应用需要可穿戴设备权限(例如,为了在手机断开连接时预加载音乐),则手机应用会将用户发送到可穿戴设备以接受权限。该应用的可穿戴版本使用 requestPermissions()
方法触发系统权限对话框。

手机应用一次请求多个权限

Android 12(API 级别 31)及更高版本上的合作伙伴应用在连接手表时可以使用配套设备配置文件。使用配置文件通过将设备类型特定的权限集授予到一个步骤中来简化注册过程。
捆绑的权限在设备连接后授予配套应用,并且仅在设备关联时有效。删除应用或取消关联会移除权限。有关详细信息,请参阅 AssociationRequest.Builder.setDeviceProfile()
。
权限请求模式
有不同的模式可以向用户请求权限。按优先级顺序排列,它们是:
当权限对于特定功能明显必要,但对于整个应用的运行并非必要时,在上下文中请求。
当请求权限的原因不明显且权限对于整个应用的运行并非必要时,在上下文中进行教育。
以下各节将解释这些模式。
在上下文中请求
当用户清楚地知道执行给定操作需要权限时,请求权限。当用户理解权限与其想要使用的功能之间的联系时,他们更有可能授予权限。
例如,应用可能需要用户的位置才能显示附近的兴趣点。当用户点击搜索附近的地点时,应用可以立即请求位置权限,因为搜索附近的地点与需要位置权限之间存在明确的关系。这种关系的明显性使得应用无需显示额外的教育屏幕。

在上下文中进行教育
图 6 显示了上下文中教育的示例。应用不需要权限即可启动计时器,但内联教育提示显示 Activity 的一部分(位置检测)已被锁定。当用户点击提示时,会出现一个权限请求屏幕,让用户解锁位置检测。
使用 shouldShowRequestPermissionRationale()
方法可帮助您的应用决定是否提供更多信息。有关更多详细信息,请参阅请求应用权限。或者,您可以查看 GitHub 上的扬声器示例应用如何处理显示信息。

处理拒绝
如果用户拒绝了对于预期 Activity 并非关键的请求权限,请勿阻止他们继续该 Activity。如果 Activity 的某些部分因拒绝的权限而被禁用,请提供可视的、可操作的反馈。
图 7 显示了使用锁图标来指示某个功能因用户未授予使用权限而被锁定。

当之前被拒绝的可穿戴设备权限对话框第二次出现时,它会包含一个拒绝,不再显示选项。如果用户选择此选项,则他们将来授予此权限的唯一方法是进入可穿戴设备的“设置”应用。

了解有关如何处理权限拒绝的更多信息。
服务的权限
只有 Activity 可以调用 requestPermissions()
方法,因此如果用户使用服务(例如,通过表盘)与您的应用交互,则服务必须在请求权限之前打开一个 Activity。在此 Activity 中,提供有关为何需要该权限的额外教育。
通常,不要为表盘请求权限。相反,实现一个复杂功能,并让用户通过复杂功能选择要显示的数据。
设置
用户可以随时在“设置”中更改 Wear 应用的权限。当用户尝试执行需要权限的操作时,首先调用 checkSelfPermission()
方法,以查看应用是否具有执行该操作的权限。
即使用户之前已授予权限,也要执行此检查,因为用户可能随后撤销了它。
