From a0162491d5b9cc65edd326271b60780ef08bfc2a Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Tue, 2 Dec 2025 16:14:16 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2=E8=A1=A8?= =?utf8?q?=E6=83=85=E6=97=B6=E7=86=84=E5=B1=8F=E5=AF=BC=E8=87=B4=E9=BB=91?= =?utf8?q?=E8=84=B8=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../thunderbird/src/ThunderBirdMainView.cpp | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp index 4c6f20b06..12a813073 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp @@ -51,6 +51,9 @@ namespace OHOS // 时间线是否已获取标志 static bool g_timelineReceived = false; // 时间线是否已获取 + // 正在切换视频标志,用于防止在切换视频时被屏幕状态通知暂停 + static bool g_isSwitchingVideo = false; + static void ScreenStatusNotify(ScreenStatus status) { if (g_videoPlay == nullptr) @@ -58,6 +61,13 @@ namespace OHOS return; } + // 如果正在切换视频,不执行暂停操作 + if (g_isSwitchingVideo) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ScreenStatusNotify: 正在切换视频,忽略屏幕状态变化"); + return; + } + bool temp = g_videoPlay->isPlayed_; if (status == SCREEN_STATUS_OFF) { @@ -414,6 +424,32 @@ namespace OHOS WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Already playing the same video, skipping: %s", uri); return true; // 返回true表示"成功",因为不需要切换 } + + // 设置切换视频标志,防止屏幕状态通知暂停播放 + g_isSwitchingVideo = true; + + // 检查屏幕状态,如果屏幕关闭,先亮屏并等待 + int screenState = uapi_get_screen_state(); + if (screenState != 0) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Screen is off (state=%d), turning on screen", screenState); + uapi_set_screen_on_api(); + // 等待屏幕亮起(最多等待500ms,每次检查50ms) + int waitCount = 0; + const int maxWaitCount = 10; // 10 * 50ms = 500ms + while (waitCount < maxWaitCount) { + usleep(50000); // 等待50ms (50000微秒) + screenState = uapi_get_screen_state(); + if (screenState == 0) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Screen is now on after %d ms", waitCount * 50); + break; + } + waitCount++; + } + if (screenState != 0) { + WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Screen still off after waiting, proceeding anyway"); + } + } + // 停止并销毁旧播放器 if (videoPlay_ != nullptr) { @@ -433,6 +469,7 @@ namespace OHOS if (surface == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Failed to get surface from surfaceView_"); + g_isSwitchingVideo = false; // 清除标志 return false; } @@ -441,6 +478,7 @@ namespace OHOS if (videoPlay_ == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Failed to create MediaVideoPlay"); + g_isSwitchingVideo = false; // 清除标志 return false; } g_videoPlay = videoPlay_; @@ -448,12 +486,16 @@ namespace OHOS if (ret != 0) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Failed to start video play, ret=%d", ret); + g_isSwitchingVideo = false; // 清除标志 return false; } // 更新当前播放的视频路径 currentVideoPath_ = std::string(uri); + // 清除切换视频标志 + g_isSwitchingVideo = false; + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::SwitchVideo: Successfully switched to video: %s", uri); return true; } -- 2.17.1