在Kotlin中使用UtteranceProgressListener

问题描述 投票:0回答:1

我对Kotlin很新,并且最近一直在玩Android TextToSpeech课程。我让它以一种基本的方式工作,但现在我想尝试检测说话开始/停止的时间。

据我了解,我需要使用UtteranceProgressListener,但我不知道如何在Kotlin中设置它。这是我设置它的方法:

private fun setTextToSpeech() {
    textToSpeech = TextToSpeech(this@PhraseListActivity, TextToSpeech.OnInitListener { status ->
        if (status == TextToSpeech.SUCCESS) {
            val languageToSpeak = Locale(intent.getStringExtra(DESIRED_LOCALE))
            val result = textToSpeech.setLanguage(languageToSpeak)
            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                toast("This language is not supported for text-to-speech")
            } else {
                languageCanBeSpoken = true
            }
        } else
            Log.e("error", "Initilisation Failed!")
    })

    class speechListener : UtteranceProgressListener() {
        override fun onDone(utteranceId: String?) {
            toast("finished speaking")
        }

        override fun onError(utteranceId: String?) {
            toast("error when speaking")
        }

        override fun onStart(utteranceId: String?) {
            toast("speaking started")
        }

    }

    textToSpeech.setOnUtteranceProgressListener(speechListener)
}

启动textToSpeech =的行工作正常,但函数中尝试设置话语监听器的最后一行不起作用。当我尝试通过speechListener设置textToSpeech.setOnUtteranceProgressListener时,它给了我一个编译错误:

分类器'speechListener'没有伴随对象,必须在此处初始化

我不太确定它是否在speechListener的同伴对象中要求某些东西,或其他一些初始化,任何想法?

android kotlin
1个回答
2
投票

代码中的class speechListener声明声明了一个本地类。 setOnUtteranceProgressListener需要类的实例作为参数。因此,您需要调用构造函数来创建实例:

textToSpeech.setOnUtteranceProgressListener(speechListener())   

或者,您可以使用object expression,它相当于Java的匿名内部类:

val speechListener = object : UtteranceProgressListener() { ... }
textToSpeech.setOnUtteranceProgressListener(speechListener)    
© www.soinside.com 2019 - 2024. All rights reserved.