fix: 修复语音任务状态管理问题
在收到流式语音指令时,立即标记当前任务为语音任务,防止被其他任务覆盖 在TTS队列和缓冲区清空且无语音播放时,自动清除语音任务标记 将onReposeStatusChanged方法移至文件末尾以保持代码结构清晰
This commit is contained in:
@@ -380,23 +380,15 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG
|
||||
}
|
||||
}
|
||||
|
||||
override fun onReposeStatusChanged(status: Int, description: String) {
|
||||
when (status) {
|
||||
OnReposeStatusChangedListener.REPOSING_COMPLETE -> {
|
||||
val ttsRequest = TtsRequest.create("重新定位成功", false, language = TtsRequest.Language.ZH_CN)
|
||||
robot.speak(ttsRequest)
|
||||
Log.i("MainActivity", "Repose complete")
|
||||
fun markSpeechTaskActive() {
|
||||
if (currentTask.isEmpty() || currentTask == "speech") {
|
||||
setCurrentTask("speech")
|
||||
}
|
||||
OnReposeStatusChangedListener.REPOSING_ABORT -> {
|
||||
val ttsRequest = TtsRequest.create("重新定位被中断", false, language = TtsRequest.Language.ZH_CN)
|
||||
robot.speak(ttsRequest)
|
||||
Log.w("MainActivity", "Repose aborted")
|
||||
}
|
||||
OnReposeStatusChangedListener.REPOSING_START -> {
|
||||
val ttsRequest = TtsRequest.create("正在进行重新定位", false, language = TtsRequest.Language.ZH_CN)
|
||||
robot.speak(ttsRequest)
|
||||
Log.i("MainActivity", "Repose started")
|
||||
}
|
||||
|
||||
fun clearSpeechTaskIfActive() {
|
||||
if (currentTask == "speech") {
|
||||
setCurrentTask("")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -463,4 +455,24 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG
|
||||
outState.putString("lastArrivalLocation", lastArrivalLocation)
|
||||
}
|
||||
|
||||
override fun onReposeStatusChanged(status: Int, description: String) {
|
||||
when (status) {
|
||||
OnReposeStatusChangedListener.REPOSING_COMPLETE -> {
|
||||
val ttsRequest = TtsRequest.create("重新定位成功", false, language = TtsRequest.Language.ZH_CN)
|
||||
robot.speak(ttsRequest)
|
||||
Log.i("MainActivity", "Repose complete")
|
||||
}
|
||||
OnReposeStatusChangedListener.REPOSING_ABORT -> {
|
||||
val ttsRequest = TtsRequest.create("重新定位被中断", false, language = TtsRequest.Language.ZH_CN)
|
||||
robot.speak(ttsRequest)
|
||||
Log.w("MainActivity", "Repose aborted")
|
||||
}
|
||||
OnReposeStatusChangedListener.REPOSING_START -> {
|
||||
val ttsRequest = TtsRequest.create("正在进行重新定位", false, language = TtsRequest.Language.ZH_CN)
|
||||
robot.speak(ttsRequest)
|
||||
Log.i("MainActivity", "Repose started")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -203,6 +203,9 @@ class MqttManager(
|
||||
"stream" -> {
|
||||
val text = obj.optString("text", obj.optString("content", ""))
|
||||
val lang = obj.optString("lang", "")
|
||||
scope.launch(Dispatchers.Main) {
|
||||
(context as? MainActivity)?.markSpeechTaskActive()
|
||||
}
|
||||
processStreamText(text, lang)
|
||||
}
|
||||
"repose" -> {
|
||||
@@ -210,9 +213,6 @@ class MqttManager(
|
||||
Log.i(TAG, "Repose command sent: $ok")
|
||||
}
|
||||
"stop" -> {
|
||||
scope.launch(Dispatchers.Main) {
|
||||
(context as? MainActivity)?.setCurrentTask("")
|
||||
}
|
||||
navController.stop()
|
||||
pauseTts()
|
||||
}
|
||||
@@ -421,6 +421,9 @@ class MqttManager(
|
||||
if (!isTtsPaused) {
|
||||
processNextTts()
|
||||
}
|
||||
if (!isTtsPaused && !isTtsBusy && ttsQueue.isEmpty() && speechBuffer.isEmpty()) {
|
||||
(context as? MainActivity)?.clearSpeechTaskIfActive()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user