Android 在onInit外部自动运行文本到语音
所以现在,当我运行应用程序时,函数showLabel首先运行,而不是初始化TTS。我总是得到一个tts为空的错误。有没有更好的方法来解决这个问题?我应该将showLabel上的代码移动到onInit中吗?它也有一个参数。目标是Android 在onInit外部自动运行文本到语音,android,kotlin,text-to-speech,Android,Kotlin,Text To Speech,所以现在,当我运行应用程序时,函数showLabel首先运行,而不是初始化TTS。我总是得到一个tts为空的错误。有没有更好的方法来解决这个问题?我应该将showLabel上的代码移动到onInit中吗?它也有一个参数。目标是firstObject将成为TTS的文本。当我尝试在内部添加.speak时,它会工作,但在外部时,它会导致空错误。任何帮助都将是感激的 private var tts: TextToSpeech? = null var firstObject = "" override
firstObject
将成为TTS的文本。当我尝试在内部添加.speak时,它会工作,但在外部时,它会导致空错误。任何帮助都将是感激的
private var tts: TextToSpeech? = null
var firstObject = ""
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_live_preview)
tts = TextToSpeech(this, this)
fun showLabel(labels: List<FirebaseVisionImageLabel>?) {
firstObject = labels!!.first().text
Log.d(TAG, firstObject)
tts!!.speak(firstObject, TextToSpeech.QUEUE_FLUSH, null, "")
}
override fun onInit(status: Int) {
if (status == TextToSpeech.SUCCESS) {
// set US English as language for tts
val result = tts!!.setLanguage(Locale.US)
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS","The Language specified is not supported!")
} else {
Log.d("TTS", "Initilization Successful")
tts!!.speak("This is a test", TextToSpeech.QUEUE_FLUSH, null, "") // works
cameraSource?.setMachineLearningFrameProcessor(ImageLabelingProcessor())
}
} else {
Log.e("TTS", "Initilization Failed!")
}
}
private-var-tts:TextToSpeech?=无效的
var firstObject=“”
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u live\u预览)
tts=TextToSpeech(这个,这个)
趣味showLabel(标签:列表?){
firstObject=标签!!.first().text
Log.d(标记,第一个对象)
tts!!.speak(第一个对象,TextToSpeech.QUEUE\u FLUSH,null,“”)
}
覆盖乐趣onInit(状态:Int){
if(status==TextToSpeech.SUCCESS){
//将美国英语设置为tts的语言
val result=tts!!.setLanguage(Locale.US)
if(result==TextToSpeech.LANG_缺少数据| | result==TextToSpeech.LANG_不受支持){
Log.e(“TTS”,“不支持指定的语言!”)
}否则{
Log.d(“TTS”,“初始化成功”)
tts!!.speak(“这是一个测试”,TextToSpeech.QUEUE\u FLUSH,null,”),可以正常工作
cameraSource?.setMachineLearningFrameProcessor(ImageLabelingProcessor())
}
}否则{
Log.e(“TTS”,“初始化失败!”)
}
}
您不能对尚未初始化的TTS对象调用speak()
由于showLabel()函数中有speak(),这意味着在TTS初始化之前也不能调用showLabel()
您可以做的是创建一个类级布尔变量ttsIsInitialized,并将其设置为false,直到TTS初始化为止……从onInit()内部将其设置为true
然后,在showLabel()中,您要做的第一件事是检查布尔值an是否仍然为false,然后返回/不执行任何操作。顺便说一句,这段代码没有编译。看起来您缺少onCreate的右括号?@BooberBunz抱歉,这只是我代码的一个片段,但我可以显示完整的代码