Android SpeechRecognizer.Как кешировать «готовое» звуковое событие? - PullRequest
0 голосов
/ 15 ноября 2018

У меня небольшая проблема с методом android.speech.SpeechRecognizer.

speechRecognizer.startListening(speechIntent) 

Иногда требуется много времени, пока не запустится "готовый" звук (в основном после перезапуска приложения).Я не могу найти что-то вроде слушателя onSpeechRecognitionReady.Как я могу поймать это событие, чтобы сделать progressBar?

Я могу инициализировать распознаватель таким образом

private fun initSpeechRecognizer() {
        speechIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
        speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US")
        speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, packageName)
        speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this)
        speechRecognizer.setRecognitionListener(object : RecognitionListenerAdapter(){
            override fun onResults(results: Bundle) {
                val matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
                tv_speech.text = matches[0]
                btn_speech.isChecked = false
            }
        })
    }

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Я думаю, что вы должны использовать RecognitionListener , который имеет метод onReadyForSpeech , чтобы вы могли показать свой индикатор выполнения на init и скрыть его наReadyForSpeech

0 голосов
/ 16 ноября 2018

Теперь я должен сделать этот уродливый хак. Создает избыточное начало прослушивания и прекращает прослушивание звуков.

override fun onCreate(savedInstanceState: Bundle?) {
    initSpeechRecognizer()            
    speechRecognizer.startListening(speechIntent)
    speechRecognizer.stopListening()
}
...