在 Wear OS 上请求权限

关键字:wear,权限,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()提供其他信息

如果某个应用或表盘需要一次请求多个权限,则权限请求会一个接一个地显示。

Multiple permission screens, one after another.
图 1. 权限屏幕依次出现。

Wear 应用请求手机权限

当 Wear 应用请求手机权限时(例如,可穿戴设备应用想要访问手机版应用上的照片或其他敏感数据),Wear 应用必须将用户引导至手机以接受权限。在手机上,手机应用可以使用 Activity 为用户提供其他信息。在 Activity 中,包含两个按钮:一个用于授予权限,另一个用于拒绝权限。

The Wear app sends the user to the phone to grant permission.
图 2. 将用户引导至手机以授予权限。

手机应用请求可穿戴设备权限

如果用户在手机应用中,并且该应用需要可穿戴设备权限(例如,在手机断开连接的情况下预加载音乐),则手机应用会将用户引导至可穿戴设备以接受权限。可穿戴设备版应用使用 requestPermissions() 方法触发系统权限对话框。

The phone app sends the user to the wearable to grant permission.
图 3. 将用户引导至可穿戴设备以授予权限。

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

图 4. 使用伴侣设备配置文件在一个请求中请求多个权限的权限对话框。

在 Android 12(API 级别 31)及更高版本上,合作伙伴应用在连接到手表时可以使用伴侣设备配置文件。使用配置文件通过将设备类型特定权限集的授予捆绑到一个步骤中来简化注册过程。

设备连接后,捆绑的权限将授予伴侣应用,并且仅在设备关联期间有效。删除应用或移除关联会删除权限。有关详细信息,请参阅 AssociationRequest.Builder.setDeviceProfile()

权限请求模式

有多种模式可以请求用户的权限。按优先级排序,它们是

  • 在上下文中询问,当权限对于特定功能显然是必要的,但对于应用整体运行来说并非必要时。

  • 在上下文中进行教育,当请求权限的原因不明确,并且权限对于应用整体运行来说并非必要时。

这些模式将在以下部分中进行解释。

在上下文中询问

在用户清楚为何需要权限才能执行特定操作时请求权限。当用户了解权限与其想要使用的功能之间的关联时,更有可能授予权限。

例如,应用可能需要用户的位置来显示附近的兴趣点。当用户点击搜索附近的场所时,应用可以立即请求位置权限,因为搜索附近的场所与需要位置权限之间存在明确的关系。这种关系的明显性使得应用无需显示其他教育屏幕。

The app requests permission when it's obviously necessary.
图 5. 在上下文中请求权限。

在上下文中进行教育

图 6 显示了一个上下文教育的示例。应用不需要权限即可启动计时器,但内联教育提示显示活动的一部分(位置检测)被锁定。当用户点击提示时,会显示权限请求屏幕,让用户解锁位置检测。

使用 shouldShowRequestPermissionRationale() 方法来帮助您的应用确定是否提供更多信息。有关其他详细信息,请参阅 请求应用权限。或者,您可以检查 GitHub 上的扬声器示例应用如何处理 显示信息

When the need for the permission arises, the app explains why the permission is necessary.
图 6. 在上下文中进行教育。

处理拒绝

如果用户拒绝了对预期活动不重要的请求权限,请不要阻止他们继续该活动。如果某些活动部分因拒绝的权限而被禁用,请提供视觉上的可操作反馈。

图 7 显示了使用锁定图标来指示功能被锁定的情况,因为用户没有授予使用该功能的权限。

When the user denies permission, a lock icon is shown alongside the associated feature.
图 7. 锁定图标显示由于拒绝权限而导致功能被锁定。

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

The system offers to stop requesting permission.
图 8. 用户可以通过“设置”访问以前已被拒绝两次的权限请求。

详细了解如何 处理权限拒绝

服务的权限

只有 Activity 才能调用 requestPermissions() 方法,因此如果用户通过服务(例如,通过表盘)与您的应用进行交互,则服务必须在请求权限之前打开 Activity。在此 Activity 中,提供有关为何需要权限的其他说明。

一般来说,不要为表盘请求权限。相反,请实现一个 复杂功能,并让用户通过复杂功能选择要显示的数据。

设置

用户可以随时在“设置”中更改 Wear 应用的权限。当用户尝试执行需要权限的操作时,首先调用 checkSelfPermission() 方法以查看应用是否具有执行该操作的权限。

即使用户之前已授予权限,也请执行此检查,因为用户可能随后已撤销了权限。

The user can change permissions through the Settings app.
图 9. 用户可以使用“设置”应用更改权限。