diff --git a/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt b/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt index f0752af30c..4dab0363b9 100644 --- a/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt +++ b/tts/tts-iflytek/src/main/java/com/mogo/tts/iflytek/IFlyTekTts.kt @@ -68,8 +68,15 @@ class IFlyTekTts : IMogoTTS, InitListener { } override fun release() { - ttsEngine?.stopSpeaking() - ttsEngine?.destroy() + if (Thread.currentThread() != Looper.getMainLooper().thread) { + UiThreadHandler.post { + ttsEngine?.stopSpeaking() + ttsEngine?.destroy() + } + } else { + ttsEngine?.stopSpeaking() + ttsEngine?.destroy() + } } override fun flush() { @@ -91,7 +98,16 @@ class IFlyTekTts : IMogoTTS, InitListener { override fun speakTTSVoiceWithLevel(tts: String?, level: Int, callBack: IMogoTTSCallback?) { if (tts.isNullOrEmpty()) return - speakMultiLangTTSWithLevel(MultiLangTtsEntity(listOf(LangTtsEntity(tts, LanguageType.CHINESE))), level, callBack) + speakMultiLangTTSWithLevel( + MultiLangTtsEntity( + listOf( + LangTtsEntity( + tts, + LanguageType.CHINESE + ) + ) + ), level, callBack + ) } override fun speakMultiLangTTSWithLevel( @@ -99,10 +115,19 @@ class IFlyTekTts : IMogoTTS, InitListener { level: Int, callBack: IMogoTTSCallback? ) { - if (callBack != null) { - speakVoiceMap[ttsEntity.toString()] = callBack + if (Thread.currentThread() != Looper.getMainLooper().thread) { + UiThreadHandler.post { + if (callBack != null) { + speakVoiceMap[ttsEntity.toString()] = callBack + } + speakMultiLangTTSWithLevel(ttsEntity, level) + } + } else { + if (callBack != null) { + speakVoiceMap[ttsEntity.toString()] = callBack + } + speakMultiLangTTSWithLevel(ttsEntity, level) } - speakMultiLangTTSWithLevel(ttsEntity, level) } override fun stopSpeakTts(text: String?) { @@ -110,6 +135,16 @@ class IFlyTekTts : IMogoTTS, InitListener { } override fun stopTts() { + if (Thread.currentThread() != Looper.getMainLooper().thread) { + UiThreadHandler.post { + realStop() + } + } else { + realStop() + } + } + + private fun realStop() { curTtsEntity?.let { val string = it.toString() if (speakVoiceMap.containsKey(string)) {