当我将英语设置为默认语言运行此程序时,一切都很好,但是,即使我打开了Internet连接,当我使用任何不能脱机使用的语言运行该程序时,我仍然会收到错误4(ERROR_SERVER)。
我前一段时间通过将语言模型更改为LANGUAGE_MODEL_WEB_SEARCH来解决此问题。但是我添加了其他一些功能,无论我在此处进行什么更改,它都无法再次使用。
我已经尝试做的事情:
- 阅读有关堆栈溢出的所有其他相关问题。
- 手动设置语音识别api(我的设备上只有一个)。
- 添加了录制音频和使用Internet的权限。
可能是由于它试图获取不存在的脱机语言而引起的。您是否知道有什么方法可以迫使SpeechRecognizer仅使用在线服务器,而不是尝试连接到脱机服务器或其他方法来修复它?
代码:
class CommandRecognizer(private val view: VoiceCommandsView) {
private val mSpeechRecognizer: SpeechRecognizer =
SpeechRecognizer.createSpeechRecognizer(view.getapplicationContext())
private val mSpeechRecognizerIntent: Intent = Intent(RecognizerIntent.actION_RECOGNIZE_SPEECH)
init {
create()
}
private fun create() {
mSpeechRecognizerIntent.putExtra(
RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH
)
mSpeechRecognizerIntent.putExtra(
RecognizerIntent.EXTRA_LANGUAGE,Locale.getDefault()
)
mSpeechRecognizer.setRecognitionListener(object : RecognitionListener {
override fun onreadyForSpeech(bundle: Bundle) {}
override fun onBeginningOfSpeech() {}
override fun onRmsChanged(v: Float) {}
override fun onBufferReceived(bytes: ByteArray) {}
override fun onEndOfSpeech() {}
override fun onError(i: Int) {
when (i) {
SpeechRecognizer.ERROR_SERVER -> view.onSpeechRecognizerServerError()
}
}
override fun onResults(bundle: Bundle) {
view.onCommandRecognizerResults(bundle)
}
override fun onPartialResults(bundle: Bundle) {}
override fun onEvent(i: Int,bundle: Bundle) {}
})
}
fun startListening() {
mSpeechRecognizer.startListening(mSpeechRecognizerIntent)
}
fun cancelListening() {
mSpeechRecognizer.cancel()
}
}
编辑:
我更改了一些内容,然后又还原它们,然后又可以正常工作(但是,每次启动应用程序时我都必须运行语音识别几次,之后才不会出现错误),尽管实际上并没有任何改变。我添加的一件事是EXTRA_PREFER_OFFLINE并将其设置为false。也许它会永久设置一些全局变量。
我也在不同的PC上构建了它。也可能是这种情况,因为当我开始在新PC上使用此应用程序,而现在又在完全不同的PC上尝试该问题时,问题就开始了。
无论如何该应用程序现在都可以运行,但是在启动该应用程序时,在前几次运行中仍然会出现错误。因此,该问题尚未完全解决,并且不是一个稳定的解决方案。