diff --git a/lib/modules/mobile_elf/controllers/mobile_elf_controller.dart b/lib/modules/mobile_elf/controllers/mobile_elf_controller.dart index c39399405..eb711cc44 100644 --- a/lib/modules/mobile_elf/controllers/mobile_elf_controller.dart +++ b/lib/modules/mobile_elf/controllers/mobile_elf_controller.dart @@ -52,6 +52,8 @@ class MobileElfController extends GetxController { bool _callStarting = false; // 防止并发 startCall // PTT 松开后仍有异步事件待处理(recognition_result / assistant_response / tts) bool _pttResultPending = false; + // BLE/AI 唤醒触发的会话(非通话、非PTT模式下的唤醒) + bool _bleWakeupActive = false; final _storage = GetStorage(); // ═══════════════════════════════════════════════════════════════════════════ @@ -118,10 +120,11 @@ class MobileElfController extends GetxController { Logger.info('$_tag event: ${event.type} data: ${event.data}'); // PTT 松开后 pttRecording=false,但 fin_result/assistant_response/tts 仍异步到达 // 用 _pttResultPending 保持会话激活,直到 ttsCompleted/error 才关闭 - final sessionActive = _inCallMode || pttRecording.value || _pttResultPending; + final sessionActive = _inCallMode || pttRecording.value || _pttResultPending || _bleWakeupActive; switch (event.type) { case AgentServiceEventType.recognitionStarted: - if (!sessionActive) break; + // BLE/AI 唤醒:即使没有主动会话也激活 + if (!sessionActive) _bleWakeupActive = true; status.value = MobileElfStatus.recording; realtimeText.value = ''; micAlive.value = true; @@ -168,6 +171,7 @@ class MobileElfController extends GetxController { case AgentServiceEventType.ttsCompleted: if (!sessionActive) break; _pttResultPending = false; // PTT 一轮结束 + _bleWakeupActive = false; // BLE 唤醒一轮结束 if (_inCallMode) { status.value = MobileElfStatus.recording; micAlive.value = true; @@ -181,6 +185,7 @@ class MobileElfController extends GetxController { case AgentServiceEventType.ttsStopped: if (!sessionActive) break; _pttResultPending = false; // TTS 被打断也视为结束 + _bleWakeupActive = false; status.value = _inCallMode ? MobileElfStatus.recording : MobileElfStatus.idle; micAlive.value = _inCallMode; break; @@ -188,6 +193,7 @@ class MobileElfController extends GetxController { case AgentServiceEventType.error: if (!sessionActive) break; _pttResultPending = false; // 出错时结束等待 + _bleWakeupActive = false; final msg = event.data['message']?.toString() ?? '未知错误'; status.value = MobileElfStatus.error; errorMsg.value = msg; @@ -260,6 +266,7 @@ class MobileElfController extends GetxController { _callStarting = false; _inCallMode = false; _pttResultPending = false; // 强制结束所有等待 + _bleWakeupActive = false; inCall.value = false; _callTimer?.cancel(); _callTimer = null;