如何在Hololens 2中禁用全局语音命令并保留自定义语音指令
实现方案说明
HoloLens 2没有公开的一键禁用全部系统全局语音命令的配置项,但可以通过两种路径实现“保留自定义语音指令、拦截系统默认语音触发”的需求:
方案1:申请独占式语音识别权限(推荐)
通过调用UWP原生语音API申请独占识别权限,申请后系统级语音服务会被暂时拦截,仅应用内注册的自定义语音指令会被响应。
具体实现步骤:
- 首先在Unity的Player设置中,开启麦克风、语音识别权限,UWP功能声明勾选「Internet(Client)」「麦克风」「语音识别」。
- 在应用启动入口脚本中添加独占识别初始化逻辑,示例代码如下:
#if WINDOWS_UWP using Windows.Media.SpeechRecognition; #endif private SpeechRecognizer exclusiveRecognizer; async void InitSpeechPermission() { #if WINDOWS_UWP exclusiveRecognizer = new SpeechRecognizer(); // 声明独占模式约束,优先级高于系统语音服务 exclusiveRecognizer.Constraints.Add(new SpeechRecognitionSystemConstraint(SpeechRecognitionSystemConstraintType.ExclusiveMode)); var compileRes = await exclusiveRecognizer.CompileConstraintsAsync(); if (compileRes.Status == SpeechRecognitionResultStatus.Success) { await exclusiveRecognizer.StartAsync(); } #endif }
- 需在应用退后台/关闭时调用
StopAsync()释放独占权限,避免用户退出应用后系统语音功能失效。
方案2:MRTK语音配置优先级调整
如果不想调用原生UWP API,可以通过调整MRTK语音配置实现拦截:
- 打开MRTK配置文件,找到
Input > Speech Input Profile(MRTK3路径为MRTK Profile > Input > Speech Interactions)。 - 将所有自定义语音指令的Confidence Level调整为Low,降低识别门槛,确保应用优先捕获语音指令。
- 主动在MRTK语音指令列表中注册和系统重复的短语(比如“拍照”“录制视频”),绑定空回调函数,这类语音触发后会被应用优先消费,不会传递到系统层。
- 注意该方案无法100%拦截所有系统指令,极端场景下可能出现漏拦截的情况,优先选择方案1。
注意事项
两种方案仅在应用处于前台运行时生效,应用退后台后系统会自动恢复全局语音权限,属于系统级限制无法绕过。
内容的提问来源于stack exchange,提问作者Usuarcox
相关产品推荐
相关产品推荐

