我安装了开源Kõnelesource code),目的是研究如何编写和注册自定义语音识别服务。第一步,在深入研究源代码之前,我试图验证它确实按预期工作。因此,我转到手机的System settings> Language & input> Voice recognizer,并选择Kõnele作为系统的识别器:



然后,我尝试了手机中的各种应用程序,这些应用程序为键盘提供了带有麦克风选项的键盘,期望当我触摸麦克风符号时,会使用Kõnele。但是,系统始终会弹出Google内置的语音搜索功能。

这是为什么?

为了使这项工作有效,我是否错过了需要配置(作为用户)的其他设置?

这是Android OS的“设计使然”限制吗?

是否可以告诉Android始终使用不是Google语音搜索的其他RecognizerIntent?如果是这样,怎么办?

更新:我设法找到一个似乎不会忽略其他RecognizerIntent的应用程序:Google Maps:



对我而言,这暗示着Android意图解析。但是,为什么有些应用程序不触发“完成操作使用”对话框,而Google地图却触发了该对话框呢?

最佳答案

我认为您已经完成了作为用户可以做的所有事情,但是想要使用语音识别器的应用程序当然可以忽略您的配置。例如。它可以通过构造如下所示的识别器来直接选择特定的语音识别器实现:

SpeechRecognizer.createSpeechRecognizer(this,
    new ComponentName("com.google",
                      "com.google.Recognizer");
);


在这种情况下,您唯一的选择是卸载或禁用此特定的实现,并希望该应用回到常规方法:

SpeechRecognizer.createSpeechRecognizer(this);


不幸的是,Google在某个时候开始提倡将应用程序直接链接到Google语音识别器的想法(请参见Add Voice Typing To Your IME)。现在有很多键盘应用程序都可以做到这一点(例如参见the issue that I raised with SwiftKey),而您唯一的选择是找到一个不会...

也可能是该应用程序发送了Kõnele不支持的意图(支持的意图在manifest中列出),但是在语音识别应用程序中支持该意图是有意义的。在这种情况下,这将是Kõnele的功能请求。

07-27 14:35