为 AI 眼镜请求硬件权限

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造优质体验。
AI 眼镜

与手机一样,访问 AI 眼镜上的相机和麦克风等敏感硬件需要获得用户的明确同意。这些权限被视为 眼镜专用权限,即使您的应用已在手机上拥有相应权限,也必须在运行时请求这些权限。

在应用的清单中声明权限

在请求权限之前,您必须在应用的清单 文件中使用 <uses-permission> 元素声明这些权限。无论权限是用于手机还是 AI 眼镜专用功能,此声明都保持不变,但您仍必须针对眼镜专用硬件或功能明确请求该权限。

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for the camera. -->
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

注册权限启动器

如需请求 AI 眼镜的权限,您首先需要使用 ActivityResultLauncherProjectedPermissionsResultContract方法注册权限 启动器。

// Register the permissions launcher using the ProjectedPermissionsResultContract.
private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> =
    registerForActivityResult(ProjectedPermissionsResultContract()) { results ->
        if (results[Manifest.permission.CAMERA] == true) {
            isPermissionDenied = false
            initializeGlassesFeatures()
        } else {
            // Handle permission denial.
            isPermissionDenied = true
        }
    }

代码要点

创建请求函数

接下来,您将创建一个函数,该函数使用应用的权限启动器在运行时向用户请求权限。

private fun requestHardwarePermissions() {
    val params = ProjectedPermissionsRequestParams(
        permissions = listOf(Manifest.permission.CAMERA),
        rationale = "Camera access is required to overlay digital content on your physical environment."
    )
    requestPermissionLauncher.launch(listOf(params))
}

代码要点

  • requestHardwarePermissions 函数会构建 ProjectedPermissionsRequestParams 对象。此对象会捆绑您的应用需要的权限列表以及面向用户的理由。请确保理由清晰简洁,以说明您的应用为何需要这些权限。
  • 对启动器调用 launch 会触发 权限请求用户 流程
  • 您的应用应在启动器的回调中妥善处理授予和拒绝结果。

创建权限检查函数

接下来,您将创建一个函数,该函数可以检查用户是否已向您的应用授予权限。

private fun hasCameraPermission(): Boolean {
    return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ==
            PackageManager.PERMISSION_GRANTED
}

添加权限请求逻辑

最后,创建使用这些函数在运行时检查和请求权限的逻辑。

if (hasCameraPermission()) {
    initializeGlassesFeatures()
} else {
    requestHardwarePermissions()
}

代码要点

  • 如果用户已向您的应用授予所需权限,系统会调用 initializeGlassesFeatures 函数来初始化应用体验。此函数被定义为 AI 眼镜的应用 activity 的一部分。

了解权限请求用户流程

当您使用 ProjectedPermissionsResultContract方法启动权限请求时,系统会在 AI 眼镜和手机上启动 协调的用户流程。

在权限用户流程期间,您的应用和用户可以预期以下情况:

  1. 在 AI 眼镜上投影设备 (眼镜)上会显示一个 activity,指示用户查看手机以继续操作。

  2. 在手机上:同时,宿主设备 (手机) 上会启动一个 activity。此屏幕会显示您提供的理由字符串,并为用户提供继续或取消的选项。

  3. 在手机上:如果用户接受该理由,手机上会显示一个经过修改的 Android 系统权限对话框,告知用户他们正在 为 AI 眼镜设备 (而非手机)授予权限,并且 用户可以正式授予或拒绝该权限。

  4. 接收结果:用户做出最终选择后, 手机和 AI 眼镜上的 activity 都会被关闭。然后,系统会使用一个映射(其中包含每个请求的权限的授予状态)调用您的 ActivityResultLauncher 回调。