SpeechRecognizer ERROR_SERVER 当 运行 不是离线语言时
SpeechRecognizer ERROR_SERVER when running not offline languages
当我 运行 将英语设置为默认语言时,一切都很好,但是当我 运行 将它设置为无法离线使用的任何语言时,我不断收到错误 4 (ERROR_SERVER), 即使我打开互联网连接。
我前段时间通过将语言模型更改为 LANGUAGE_MODEL_WEB_SEARCH 来修复它。但是我添加了一些其他功能,无论我在这里更改什么,它都无法再次工作。
我已经尝试过的事情:
- 阅读 Stack Overflow 上的所有其他相关问题。
- 手动设置语音识别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 上尝试了它。
无论如何,该应用程序现在可以正常运行,但在启动该应用程序时的前几 运行 秒内仍然会出现错误。所以问题没有完全解决,这不是一个稳定的解决方案。
最后我永久修复了它。它不工作的唯一原因就是 STAMINA 模式。禁用后一切正常。
当我 运行 将英语设置为默认语言时,一切都很好,但是当我 运行 将它设置为无法离线使用的任何语言时,我不断收到错误 4 (ERROR_SERVER), 即使我打开互联网连接。
我前段时间通过将语言模型更改为 LANGUAGE_MODEL_WEB_SEARCH 来修复它。但是我添加了一些其他功能,无论我在这里更改什么,它都无法再次工作。
我已经尝试过的事情:
- 阅读 Stack Overflow 上的所有其他相关问题。
- 手动设置语音识别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 上尝试了它。
无论如何,该应用程序现在可以正常运行,但在启动该应用程序时的前几 运行 秒内仍然会出现错误。所以问题没有完全解决,这不是一个稳定的解决方案。
最后我永久修复了它。它不工作的唯一原因就是 STAMINA 模式。禁用后一切正常。