我对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
中的伴侣对象中要求某些内容,或其他一些初始化,是否有任何想法?
答案 0 :(得分:2)
代码中的class speechListener
声明声明了一个本地类。 setOnUtteranceProgressListener
需要将类的实例作为参数。因此,您需要调用构造函数来创建实例:
textToSpeech.setOnUtteranceProgressListener(speechListener())
或者,您可以使用object expression,这相当于Java的匿名内部类:
val speechListener = object : UtteranceProgressListener() { ... }
textToSpeech.setOnUtteranceProgressListener(speechListener)