增加设备哄睡保护机制
authorxue <2144439972@qq.com>
Fri, 16 Jan 2026 07:31:17 +0000 (15:31 +0800)
committerxue <2144439972@qq.com>
Fri, 16 Jan 2026 07:31:17 +0000 (15:31 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c

index 5e56e18..df5e95e 100644 (file)
@@ -228,6 +228,7 @@ namespace OHOS
         }
         case THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW:
         {
+            uapi_set_sleep_mode_active(false);
             ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
             // uapi_set_sleep_mode_active(false);//睡眠模式激活标志位
             //如果仍在对话,取消对话
index 1b2c5fd..f0e750b 100644 (file)
@@ -283,12 +283,16 @@ void ln_parse_voice_chat_response(const char *json_str, int json_len)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始哄睡\n");
             push_sleep_mode_start_notification(NULL, 1); // 1意图识别结果
+            // 标记为开启哄睡(在通知之后设置,作为保护机制)
+            uapi_set_sleep_mode_active(true);
             // ln_ws_send_random_story_request("随机故事");
         }
         else if(strcmp(intention_str, "EndSleepMode") == 0)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "结束哄睡\n");
             push_sleep_mode_end_notification();
+            // 标记为结束哄睡(在通知之后清除,作为保护机制)
+            uapi_set_sleep_mode_active(false);
         }
     }
     else
@@ -320,11 +324,12 @@ bool uapi_get_sleep_mode_active(void)
 /* 解析哄睡模式开始:提取data.storyTheme并触发随机故事 */
 void ln_parse_sleep_mode_start(const char *json_str, int json_len)
 {
-    // if(g_sleep_mode_active)
-    // {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active\n");
-    //     return;
-    // }
+    // 设备层面保护机制:如果已经开启哄睡,直接返回,防止重复开始故事
+    if(uapi_get_sleep_mode_active())
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] sleep mode already active, return directly\n");
+        return;
+    }
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_START] parse json\n");
        (void)json_len;
        if (json_str == NULL) {
@@ -350,7 +355,8 @@ void ln_parse_sleep_mode_start(const char *json_str, int json_len)
         theme = "随机";
     }
     push_sleep_mode_start_notification(theme, 0);//0小程序直接发起,不是意图识别结果
-    g_sleep_mode_active = true;
+    // 标记为开启哄睡(在通知之后设置,作为保护机制)
+    uapi_set_sleep_mode_active(true);
     
     // 等待音频初始化完成后再发送随机故事请求
     // 等待音频初始化超时时间:5秒,每100ms检查一次
@@ -401,9 +407,9 @@ void ln_parse_sleep_mode_end(const char *json_str, int json_len)
        /* 标记故事结束,供UI状态机使用 */
     ln_voice_chat_interrupt("哄睡模式结束");
     push_sleep_mode_end_notification();
+    // 标记为结束哄睡(在通知之后清除,作为保护机制)
+    uapi_set_sleep_mode_active(false);
     ln_ws_send_sleep_mode_end_ack(true, "哄睡模式结束");
     
-    // 清除睡眠模式已开始标志
-    g_sleep_mode_active = false;
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN][SLEEP_END] sleep mode flag cleared\n");
 }