From ddca55c945483b45fb97237a85833b09aab7fce9 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Fri, 6 Feb 2026 17:14:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(qq=5Fmusic):=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=9A=82=E5=81=9C=E9=9F=B3=E4=B9=90=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BB=A5=E7=AE=80=E5=8C=96=E6=9A=82=E5=81=9C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 autopauseMusic 方法,该方法在 QQ 音乐插件、服务层和控制器中实现。它封装了检查播放状态并暂停的逻辑,替换了原先需要先同步播放信息再手动暂停的多步操作,使代码更简洁并减少潜在的错误。 --- lib/data/services/qq_music.dart | 14 ++++++++++++++ .../controllers/translation_controller.dart | 4 +--- .../com/yunqiinnovation/qq_music/QqMusicPlugin.kt | 8 ++++++++ local_plugins/qq_music/lib/qq_music.dart | 10 ++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/lib/data/services/qq_music.dart b/lib/data/services/qq_music.dart index 87a20f645..2ea18a91b 100644 --- a/lib/data/services/qq_music.dart +++ b/lib/data/services/qq_music.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:ffi'; import 'package:get/get.dart'; import 'package:qq_music/qq_music.dart'; import '../models/song_model.dart'; @@ -266,6 +267,19 @@ class QqMusicService extends GetxService { } } + /// 自动暂停音乐 + Future autopauseMusic() async { + try { + final result = await _qqMusic.autopauseMusic(); + if (result['success'] == true) { + isPlaying.value = false; + } + return result['success'] == true; + } catch (e) { + return false; + } + } + /// 继续播放 Future> resumeMusic() async { try { diff --git a/lib/modules/translation/controllers/translation_controller.dart b/lib/modules/translation/controllers/translation_controller.dart index d53e2876d..58169b063 100644 --- a/lib/modules/translation/controllers/translation_controller.dart +++ b/lib/modules/translation/controllers/translation_controller.dart @@ -766,10 +766,8 @@ class TranslationController extends GetxController with WidgetsBindingObserver { } if (!_isContinueQqMusicPlaying) { - await _qqMusicManager.syncCurrentPlayInfo(); - if (_qqMusicManager.isPlaying.value == true) { + if (await _qqMusicManager.autopauseMusic()) { _isContinueQqMusicPlaying = true; - await _qqMusicManager.pauseMusic(); } } } catch (e) { diff --git a/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QqMusicPlugin.kt b/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QqMusicPlugin.kt index bc081fdb1..d1367ba2c 100644 --- a/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QqMusicPlugin.kt +++ b/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QqMusicPlugin.kt @@ -141,6 +141,14 @@ class QqMusicPlugin: FlutterPlugin, MethodCallHandler, ActivityAware { ) } } + "autopauseMusic" -> { + qqMusicSingleton.autopauseMusic { kotlinResult -> + kotlinResult.fold( + onSuccess = { result.success(mapOf("success" to true)) }, + onFailure = { error -> result.error("PAUSE_FAILED", error.message, null) } + ) + } + } "resumeMusic" -> { qqMusicSingleton.resumeMusic { kotlinResult -> kotlinResult.fold( diff --git a/local_plugins/qq_music/lib/qq_music.dart b/local_plugins/qq_music/lib/qq_music.dart index 6ec79da88..adc01c2f3 100644 --- a/local_plugins/qq_music/lib/qq_music.dart +++ b/local_plugins/qq_music/lib/qq_music.dart @@ -81,6 +81,16 @@ class QqMusic { } } + /// 自动暂停音乐 + Future> autopauseMusic() async { + try { + final result = await _methodChannel.invokeMethod('autopauseMusic'); + return Map.from(result); + } on PlatformException catch (e) { + return {'success': false, 'error': e.message ?? '自动暂停失败', 'code': e.code}; + } + } + /// 恢复播放 Future> resumeMusic() async { try {