【发布时间】:2019-11-15 21:52:50
【问题描述】:
当我将英语设置为默认语言运行它时一切都很好,但是当我在任何离线不可用的语言上运行它时,即使我打开 Internet 连接,我也会不断收到错误 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 上开发此应用程序时问题就开始了,而现在我在完全不同的 PC 上尝试了它。
无论如何,该应用程序现在可以正常运行,但是在启动该应用程序时的前几次运行中仍然会出现错误。所以问题没有完全解决,这不是一个稳定的解决方案。
【问题讨论】:
标签: android kotlin speech-recognition