fix: 修复语音任务状态管理问题

在收到流式语音指令时,立即标记当前任务为语音任务,防止被其他任务覆盖
在TTS队列和缓冲区清空且无语音播放时,自动清除语音任务标记
将onReposeStatusChanged方法移至文件末尾以保持代码结构清晰
This commit is contained in:
2026-03-13 16:45:42 +08:00
parent 7043a92e8c
commit 9756e71a23
2 changed files with 35 additions and 20 deletions

View File

@@ -380,23 +380,15 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG
} }
} }
override fun onReposeStatusChanged(status: Int, description: String) { fun markSpeechTaskActive() {
when (status) { if (currentTask.isEmpty() || currentTask == "speech") {
OnReposeStatusChangedListener.REPOSING_COMPLETE -> { setCurrentTask("speech")
val ttsRequest = TtsRequest.create("重新定位成功", false, language = TtsRequest.Language.ZH_CN) }
robot.speak(ttsRequest) }
Log.i("MainActivity", "Repose complete")
} fun clearSpeechTaskIfActive() {
OnReposeStatusChangedListener.REPOSING_ABORT -> { if (currentTask == "speech") {
val ttsRequest = TtsRequest.create("重新定位被中断", false, language = TtsRequest.Language.ZH_CN) setCurrentTask("")
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")
}
} }
} }
@@ -463,4 +455,24 @@ class MainActivity : AppCompatActivity(), OnRobotReadyListener, TtsListener, OnG
outState.putString("lastArrivalLocation", lastArrivalLocation) 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")
}
}
}
} }

View File

@@ -203,6 +203,9 @@ class MqttManager(
"stream" -> { "stream" -> {
val text = obj.optString("text", obj.optString("content", "")) val text = obj.optString("text", obj.optString("content", ""))
val lang = obj.optString("lang", "") val lang = obj.optString("lang", "")
scope.launch(Dispatchers.Main) {
(context as? MainActivity)?.markSpeechTaskActive()
}
processStreamText(text, lang) processStreamText(text, lang)
} }
"repose" -> { "repose" -> {
@@ -210,9 +213,6 @@ class MqttManager(
Log.i(TAG, "Repose command sent: $ok") Log.i(TAG, "Repose command sent: $ok")
} }
"stop" -> { "stop" -> {
scope.launch(Dispatchers.Main) {
(context as? MainActivity)?.setCurrentTask("")
}
navController.stop() navController.stop()
pauseTts() pauseTts()
} }
@@ -421,6 +421,9 @@ class MqttManager(
if (!isTtsPaused) { if (!isTtsPaused) {
processNextTts() processNextTts()
} }
if (!isTtsPaused && !isTtsBusy && ttsQueue.isEmpty() && speechBuffer.isEmpty()) {
(context as? MainActivity)?.clearSpeechTaskIfActive()
}
} }
else -> {} else -> {}
} }