在 Wear OS 上请求权限

在 Wear OS 上请求权限与在移动应用中请求权限类似,只是有一些额外的用例。本文档假设您了解 Android 权限的工作原理。如果您不了解,请查看 Android 上的权限工作原理.

与移动应用一样,用户必须授予 Wear 应用访问某些功能的权限。在您的 Wear 应用中,提供有意义的功能,而无需请求任何权限。

权限场景

在 Wear OS 上请求 危险权限 时,您可能会遇到几种场景

  • Wear 应用请求在可穿戴设备上运行的应用的权限。

  • Wear 应用请求在手机上运行的应用的权限。

  • 手机应用请求在可穿戴设备上运行的应用的权限。

  • 手机应用请求多个权限,这些权限只能在可穿戴设备连接时使用。

要查看工作应用中的所有这些场景,请查看 GitHub 上的 ExcersizeSampleCompose 示例。

以下部分将解释每个场景。有关请求权限的更详细的信息,请参见 权限请求模式 部分。

Wear 应用请求可穿戴设备权限

当 Wear 应用请求在可穿戴设备上运行的应用的权限时,系统会显示一个对话框提示用户授予该权限。在您的应用中,仅在用户明确了解权限是执行给定操作所必需的时才请求权限。

查看 权限原则 以确保您为用户提供最佳体验,并记住检查 shouldShowRequestPermissionRationale() 并根据需要 提供其他信息

如果应用或手表表盘一次需要多个权限,则权限请求会一个接一个地出现。

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

Wear 应用请求手机权限

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

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. 用户可以通过设置访问以前两次被拒绝的权限请求。

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

服务权限

只有活动才能调用 requestPermissions() 方法,因此,如果用户使用服务与您的应用程序进行交互——例如,通过表盘,则服务必须在请求权限之前打开活动。在此活动中,提供有关为什么需要权限的额外教育。

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

设置

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

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

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