增加切换界面的保护逻辑 2972/1 2972/head 2973/target/1
authorxue <2144439972@qq.com>
Thu, 25 Dec 2025 04:12:04 +0000 (12:12 +0800)
committerxue <2144439972@qq.com>
Thu, 25 Dec 2025 04:12:04 +0000 (12:12 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp

index 1610c1e..10e2ab0 100644 (file)
@@ -3163,6 +3163,15 @@ extern "C" {
     // 录音开始处理函数
     void ThunderBirdModel::HandleAudioRecordingStart()
     {
+           // 检查 WebSocket 连接状态,如果正在重连,等待重连完成
+            int wsState = ln_ws_get_connection_state();
+            bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
+            
+            if (!wsConnected) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: WebSocket未连接(状态=%d),等待连接完成", wsState);
+                // WebSocket 未连接,不执行操作,避免状态混乱
+                return;
+            }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: 录音开始");
         if(ThunderBirdDialogueView::GetInstance()->IsNormalEnd == false)
         {
@@ -3212,6 +3221,15 @@ extern "C" {
         // return ;//需要vad的时候在处理
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingEnd: 录音结束");
         
+        // 检查 WebSocket 连接状态,如果正在重连,等待重连完成
+        int wsState = ln_ws_get_connection_state();
+        bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
+        
+        if (!wsConnected) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: WebSocket未连接(状态=%d),等待连接完成", wsState);
+            // WebSocket 未连接,不执行操作,避免状态混乱
+            return;
+        }
         // 检查是否正在退出对话模式,如果是则不应该跳转到播放界面
         ThunderBirdPresenter* presenter = ThunderBirdPresenter::GetInstance();
         if (presenter != nullptr && !presenter->isDialogueing) {
index e3b4489..b4faccc 100644 (file)
@@ -444,6 +444,16 @@ namespace OHOS
             ThunderBirdModel::GetInstance()->ClearAudioTextQueue();
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
         } else if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) {
+            // 检查 WebSocket 连接状态,如果正在重连,等待重连完成
+            int wsState = ln_ws_get_connection_state();
+            bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
+            
+            if (!wsConnected) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: WebSocket未连接(状态=%d),等待连接完成", wsState);
+                // WebSocket 未连接,不执行操作,避免状态混乱
+                return;
+            }
+            
             GraphicService::GetInstance()->PostGraphicEvent([]() {
                 AI_ForceInterrupt();
                 ln_ws_end_audio_chat();