Version: Unity 6.0 (6000.0)
语言 : 中文
声明应用程序的权限
处理 Android 崩溃

请求运行时权限

本页面介绍如何请求用户权限,以便应用程序访问设备上的数据或使用内置摄像机或麦克风等设备功能。

根据 Google 关于请求权限的准则,如果用户拒绝了一次权限请求,则应该向用户显示请求权限的原因,并再次提出请求。

有关何时以及如何在 Android 设备上请求权限的更多信息,请参阅 Android 开发者指南中的应用程序权限最佳实践

先决条件

运行时权限 API 需要 Android 版本 6(API 级别 23)。要更改应用程序的目标 API:

  1. 选择编辑 (Edit) > 项目设置 (Project Settings)
  2. 在项目设置 (Project Settings) 窗口选择播放器 (Player) 选项卡,然后打开 Android 播放器设置 (Android Player Settings)
  3. 其他设置 (Other Settings) > 标识 (Identification) 部分中,将目标 API 级别 (Target API Level) 至少设置为 23 级。

在应用程序请求使用受限数据或特定设备功能的权限之前,必须在 Android 应用程序清单中声明该权限。有关更多信息,请参阅声明应用程序权限

在运行时请求权限

Android.Permission API 提供的功能可用于检查应用程序当前拥有的权限,并请求应用程序需要但不具备的权限。

在运行时请求权限的过程概述如下:

  1. 检查用户是否已授予应用程序权限。如果有,则无需再次请求。
  2. 如果用户尚未授予权限,请检查是否需要显示请求权限的理由。如果不需要显示理由,请直接发送访问数据的权限请求或使用应用程序所需的设备功能的权限请求。
  3. 如果用户拒绝应用程序权限请求,请禁用需要特定权限的应用程序功能。如果应用程序没有此功能就无法工作,请通知用户。
  4. 如果用户仍然拒绝应用程序权限请求,最佳做法是提供一种方法,让用户从应用程序内部再次手动触发权限请求。

检查应用程序是否具有权限

使用 Permission.HasUserAuthorizedPermission 可检查用户是否已为应用程序所需的数据或功能授予权限。

有关演示如何使用此 API 的代码示例,请参阅 Permission.HasUserAuthorizedPermission

检查是否显示权限请求的理由

使用 Permission.ShouldShowRequestPermissionRationale 可检查是否需要显示特定权限请求的理由。

如果有必要,显示一条消息,说明应用程序需要访问特定设备功能的原因。显示消息后,发送权限请求。

如果不需要理由,请直接继续发送权限请求。

有关演示如何使用此 API 的代码示例,请参阅 Permission.ShouldShowRequestPermissionRationale

发送权限请求

使用 Permission.RequestUserPermission 可请求使用数据或功能的权限。调用此函数时,Android 会打开系统权限对话框,让用户批准(或拒绝)该权限。

有关演示如何使用此 API 的代码示例,请参阅 Permission.RequestUserPermission

使用 Permission.RequestUserPermissions 可请求一次访问用户设备上多个资源的权限。此方法使用字符串数组,每个字符串代表访问特定资源(例如设备的摄像机、麦克风或位置)的特定权限。

这些方法可以接受 PermissionCallbacks 对象,该对象可用于指定在用户授予或拒绝权限后运行的代码。此属性可用于在用户授予权限后立即开始使用设备功能。例如,可以从麦克风开始录音。

提示:请求权限时,最好向用户显示一条消息,说明应用程序需要该功能的原因。

注意:如果用户在系统权限对话框中启用了不再询问我选项,或者多次拒绝权限,则 RequestUserPermission() 不会打开系统对话框。在这种情况下,用户必须进入应用程序权限设置并手动启用权限。

提供一种手动触发权限请求的方法

如果用户拒绝应用程序所需的权限,请为用户提供手动显示权限请求对话框的方法。如何执行此操作取决于应用程序,但一种解决方案是提供一个调用 Permission.RequestUserPermission 的按钮。

声明应用程序的权限
处理 Android 崩溃