我从我的应用程序中使用 Android 语音识别服务。
事实证明,当两个客户端尝试同时发送请求时(例如,用户从一个应用程序启动了一次语音搜索,然后在搜索仍处于活动状态时切换到另一个应用程序,并启动了另一个搜索),服务停止工作.
有没有办法确定正在进行语音识别会话,以便我可以拒绝开始另一个?
我从我的应用程序中使用 Android 语音识别服务。
事实证明,当两个客户端尝试同时发送请求时(例如,用户从一个应用程序启动了一次语音搜索,然后在搜索仍处于活动状态时切换到另一个应用程序,并启动了另一个搜索),服务停止工作.
有没有办法确定正在进行语音识别会话,以便我可以拒绝开始另一个?
您可能应该在 onError 处理程序中捕获 ERROR_RECOGNIZER_BUSY :
@Override
public void onError(int error) {
switch (error) {
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
// do something reasonable
…
}
}
您最有可能(仅?)收到开始收听的请求;不幸的是,我不知道有任何方法可以在不尝试的情况下测试这种情况(例如,我认为您无法预先检测到另一个进程的侦听器处于活动状态以移除麦克风按钮)
(在停止监听时,如果你试图以某种方式杀死另一个进程的监听器,你只会得到这个错误。)
我收到此错误(ERROR_RECOGNIZER_BUSY)并发现我的意图设置中缺少该包。所以我刚刚添加了这一行,它现在可以工作了:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
...
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, context.getPackageName());