Hololens 2(Unity/MRTK)如何通过代码检查并申请应用权限
HoloLens 2 权限检查与主动申请实现方案
针对Unity 2020.3.13f1 + MRTK 2.7.3的开发环境,可以通过编程方式完成权限状态校验、未授权场景下的申请引导,具体实现方式如下:
权限状态编程检查
- 平台原生校验:HoloLens 2运行在UWP平台,可通过UWP原生
Windows.Security.Authorization.AppCapabilityAccess接口获取所有已声明权限的实时状态,代码需要包裹在#if WINDOWS_UWP编译宏内,避免Unity编辑器环境下的编译报错。 - MRTK内置接口:MRTK 2.7.3已封装麦克风、摄像头、眼动追踪、空间感知这几类HoloLens常用权限的检查逻辑,可直接调用
MixedRealityToolkit.Instance.GetService<IMixedRealityCapabilityCheck>()的对应方法快速判断权限状态,无需自行编写原生桥接代码。
未授权场景的主动申请逻辑
首先需要明确:HoloLens 2的系统级权限弹窗仅会在应用首次触发对应功能调用时自动弹出1次,用户点击拒绝或错过弹窗后,系统不会再次自动弹出原生申请框,这是UWP平台的系统级限制,与Unity、MRTK版本无关。
可通过以下流程实现主动权限引导:
- 每次调用敏感功能前先做权限校验,检测到权限未授予时,先弹出应用内自定义提示,明确告知用户当前功能缺失的权限项、以及权限开启后的作用,降低用户拒绝概率。
- 用户确认开启权限后,通过UWP原生
Windows.System.Launcher接口,直接跳转至当前应用的系统设置页面,用户手动开启对应权限后返回应用即可正常使用功能,无需重启应用。跳转逻辑同样需要添加#if WINDOWS_UWP编译宏。 - 针对眼动追踪这类特殊权限,除了在Manifest中声明权限外,还需要在MRTK配置面板中开启眼动追踪相关选项,否则即使在系统设置中开启权限,功能也无法正常调用。
注意事项
- UWP平台没有提供强制弹出原生权限申请框的接口,所有未授权场景下的申请最终都需要引导用户到系统设置页手动开启,不存在绕过系统机制的方案。
- 权限状态不要仅在应用启动时检查一次,建议每次进入对应功能模块前都做一次实时校验,避免用户切后台关闭权限后返回应用出现功能报错。
- Unity编辑器下运行时,权限相关接口的返回值与真机逻辑不一致,所有权限相关功能必须在HoloLens 2真机上调试验证。
目前已有开发者向MRTK官方代码仓库提交了统一权限管理、内置申请引导流程的功能需求,后续MRTK更新版本可能会直接封装完整的权限流程,无需开发者自行实现桥接逻辑。
内容的提问来源于stack exchange,提问作者P.O.W.
相关产品推荐
相关产品推荐

