取消开机为连接上报状态
authorxue <2144439972@qq.com>
Fri, 16 Jan 2026 03:02:35 +0000 (11:02 +0800)
committerxue <2144439972@qq.com>
Fri, 16 Jan 2026 03:02:35 +0000 (11:02 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 2aeda85..405155e 100644 (file)
@@ -1826,16 +1826,17 @@ extern "C" {
                     #endif
                     
                     //如果有配对设备则上报状态否则不上报
-                    unsigned int connedDevicesNum = 0;
-                    bool ret = gap_get_paired_devices_num(&connedDevicesNum);
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connedDevicesNum=%d", connedDevicesNum);
-                    if(ret == true && connedDevicesNum > 0)
-                    {
-                                            //异步上报耳机状态
-                       GraphicService::GetInstance()->PostGraphicEvent([]() {
-                        ln_bt_report_earphone_connection_status();
-                        });
-                    }
+                    //开机未连接不上报
+                    // unsigned int connedDevicesNum = 0;
+                    // bool ret = gap_get_paired_devices_num(&connedDevicesNum);
+                    // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connedDevicesNum=%d", connedDevicesNum);
+                    // if(ret == true && connedDevicesNum > 0)
+                    // {
+                    //                         //异步上报耳机状态
+                    //    GraphicService::GetInstance()->PostGraphicEvent([]() {
+                    //     ln_bt_report_earphone_connection_status();
+                    //     });
+                    // }
 
 
                     #ifdef DO_VAD_AUTH
@@ -3023,6 +3024,8 @@ extern "C" {
         StopStoryAudioPlaybackTimeoutTimer();
         // 重置故事模式finished标志
         m_storyModeFinished = false;
+        // 重置第一句音频播放标志
+        m_firstStoryAudioPlayed = false;
         
         // 退出故事模式时重新启用VAD
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出故事模式,重新启用VAD");
@@ -3041,11 +3044,21 @@ extern "C" {
                 ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
             }
             //直接退出到状态显示界面
+            // 先停止音频聊天,确保WebSocket线程停止接收音频数据
+            ln_ws_end_audio_chat();
+            // 强制中断音频播放
             AI_ForceInterrupt();
+            // 发送中断消息(通知服务器停止发送音频数据)
             ln_ws_send_voice_chat_interrupt("退出哄睡");
+            // 等待一小段时间,确保WebSocket线程处理完中断消息
+            LOS_Msleep(100);
             //推送结束故事消息
             do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);
+            // 音频deinit(清理音频资源)
             do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
+            // 等待音频deinit完成,避免在音频清理过程中切换视图
+            LOS_Msleep(50);
+            // 切换视图
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
         } else {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView instance is null, cannot end sleep mode");
@@ -3059,6 +3072,8 @@ extern "C" {
         StopStoryModeTimeoutTimer();
         // 重置故事模式finished标志
         m_storyModeFinished = false;
+        // 重置第一句音频播放标志
+        m_firstStoryAudioPlayed = false;
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "退出故事模式,重新启用VAD");
         int vad_ret = ln_ws_enable_vad_server();
         if (vad_ret == 0) {
@@ -3109,6 +3124,12 @@ extern "C" {
         m_storyModeFinished = false;
     }
     
+    void ThunderBirdModel::ResetFirstStoryAudioPlayed(void)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::ResetFirstStoryAudioPlayed: 重置第一句音频播放标志");
+        m_firstStoryAudioPlayed = false;
+    }
+    
     void ThunderBirdModel::HandleDialogueResponseFinished(bool finished)
     {
         if (finished) {
@@ -3455,15 +3476,22 @@ extern "C" {
             return;
         }
         
-        // 检查是否在故事模式(THUNDERBIRD_LULLABYVIEW_4),如果是,刷新5秒音频播放超时定时器
-        // 每次音频结束都刷新定时器,确保如果5秒内没有新的音频播放则退出
+        // 检查是否在故事模式(THUNDERBIRD_LULLABYVIEW_4)
         if (currentView == THUNDERBIRD_LULLABYVIEW &&
             currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式音频播放结束,刷新5秒超时定时器");
-            // 停止旧的定时器并重新启动,实现刷新
-            StopStoryAudioPlaybackTimeoutTimer();
-            StartStoryAudioPlaybackTimeoutTimer();
+            // 如果是第一句音频播放完成,启动5秒超时定时器
+            if (!m_firstStoryAudioPlayed) {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 第一句音频播放完成,启动5秒超时定时器");
+                m_firstStoryAudioPlayed = true;
+                StartStoryAudioPlaybackTimeoutTimer();
+            } else {
+                // 后续音频播放结束,刷新5秒超时定时器
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 故事模式音频播放结束,刷新5秒超时定时器");
+                // 停止旧的定时器并重新启动,实现刷新
+                StopStoryAudioPlaybackTimeoutTimer();
+                StartStoryAudioPlaybackTimeoutTimer();
+            }
         }
         
     }