From b2e72d29a9f2107a8a22fd558cf5ca5bf4da76e5 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Fri, 16 Jan 2026 15:31:17 +0800 Subject: [PATCH] =?utf8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87=E5=93=84?= =?utf8?q?=E7=9D=A1=E4=BF=9D=E6=8A=A4=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../src/ThunderBirdDialogueView.cpp | 1 + .../leiniao/imsl_ln/ln_api_story_random.c | 22 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp index 5e56e184a..df5e95eae 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdDialogueView.cpp @@ -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);//睡眠模式激活标志位 //如果仍在对话,取消对话 diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c index 1b2c5fd43..f0e750bd2 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api_story_random.c @@ -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"); } -- 2.17.1