From 922eebad73d64de096b787666d96a5e3c4947577 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 19 Jun 2025 19:51:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=92=AD=E6=94=BE=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E9=9F=B3=E4=B9=90=20=E6=92=AD=E6=94=BE=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=8D=E5=88=B7=E6=96=B0=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../agent/controllers/agent_controller.dart | 7 +++--- lib/modules/agent/views/music_card.dart | 6 ++--- .../music/views/music_playlist_view.dart | 24 +++++++++++-------- .../music_service/MusicService.kt | 9 +++---- .../music_service/MusicServicePlugin.kt | 4 ++-- .../music_service/lib/music_service.dart | 2 +- 6 files changed, 29 insertions(+), 23 deletions(-) diff --git a/lib/modules/agent/controllers/agent_controller.dart b/lib/modules/agent/controllers/agent_controller.dart index 0a8d204a8..c62f3ff26 100644 --- a/lib/modules/agent/controllers/agent_controller.dart +++ b/lib/modules/agent/controllers/agent_controller.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:ffi'; import 'dart:io'; import 'package:amap_service/amap_service.dart'; import 'package:deep_voice/core/utils/upload_oss.dart'; @@ -35,7 +36,7 @@ class AgentController extends GetxController { final _musiceManager = Get.find(); final _navigationManager = Get.find(); var isPlaying = false.obs; - var currentUrl = "".obs; + var currentId = 0.obs; // 播放进度相关状态 var currentPosition = 0.obs; // 当前播放位置(毫秒) @@ -822,7 +823,7 @@ class AgentController extends GetxController { var status = await _musiceManager.getStatus(); // debugPrint('获取当前音乐播放状态 $status'); isPlaying.value = status['isPlaying']; - currentUrl.value = status['url']; + currentId.value = status['id'] ?? 0; } // 播放音乐 @@ -854,7 +855,7 @@ class AgentController extends GetxController { _musiceManager.play(song); isPlaying.value = true; - currentUrl.value = song['url'] ?? ''; + currentId.value = song['id'] ?? 0; _startProgressTimer(); } diff --git a/lib/modules/agent/views/music_card.dart b/lib/modules/agent/views/music_card.dart index 7162472b6..ecdc7bbcd 100644 --- a/lib/modules/agent/views/music_card.dart +++ b/lib/modules/agent/views/music_card.dart @@ -82,7 +82,7 @@ Widget buildMusicItem(BuildContext context, int id, String name, String url, ), Obx(() { final isThisPlaying = - controller.isPlaying.value && controller.currentUrl.value == url; + controller.isPlaying.value && controller.currentId.value == id; // 只有当前播放的歌曲才显示进度 final currentProgress = @@ -97,13 +97,13 @@ Widget buildMusicItem(BuildContext context, int id, String name, String url, strokeWidth: 2.0, onPlayPause: () { if (controller.isPlaying.value) { - if (controller.currentUrl.value == url) { + if (controller.currentId.value == id) { controller.musicPause(); } else { controller.musicPlay(song); } } else { - if (controller.currentUrl.value == url) { + if (controller.currentId.value == id) { controller.musicResume(); } else { controller.musicPlay(song); diff --git a/lib/modules/music/views/music_playlist_view.dart b/lib/modules/music/views/music_playlist_view.dart index c5ca02817..65fecb2eb 100644 --- a/lib/modules/music/views/music_playlist_view.dart +++ b/lib/modules/music/views/music_playlist_view.dart @@ -162,10 +162,11 @@ class MusicPlaylistView extends StatelessWidget { // 播放按钮 Obx(() { final isThisPlaying = - controller.isPlaying.value && controller.currentUrl.value == url; - + controller.isPlaying.value && controller.currentId.value == url; + // 只有当前播放的歌曲才显示进度 - final currentProgress = isThisPlaying ? controller.progress.value : 0.0; + final currentProgress = + isThisPlaying ? controller.progress.value : 0.0; return CircularProgressButton( isPlaying: isThisPlaying, @@ -176,24 +177,27 @@ class MusicPlaylistView extends StatelessWidget { strokeWidth: 2.5, onPlayPause: () { if (controller.isPlaying.value) { - if (controller.currentUrl.value == url) { + if (controller.currentId.value == id) { controller.musicPause(); } else { controller.musicPlay(song); } } else { - if (controller.currentUrl.value == url) { + if (controller.currentId.value == id) { controller.musicResume(); } else { controller.musicPlay(song); } } }, - onSeek: isThisPlaying ? (seekProgress) { - // 只有当前播放的歌曲才允许跳转 - final targetPosition = (controller.duration.value * seekProgress).round(); - controller.seekToPosition(targetPosition); - } : null, + onSeek: isThisPlaying + ? (seekProgress) { + // 只有当前播放的歌曲才允许跳转 + final targetPosition = + (controller.duration.value * seekProgress).round(); + controller.seekToPosition(targetPosition); + } + : null, ); }), ], diff --git a/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt b/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt index 2e04578f3..682098255 100644 --- a/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt +++ b/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicService.kt @@ -35,14 +35,14 @@ class MusicService : MediaBrowserServiceCompat() { private const val DELETE_ACTION = "com.yunqiinnovation.music_service.DELETE_NOTIFICATION" private val isRunning = AtomicBoolean(false) - private var currentUrlInternal: String? = null + private var currentIdInternal: Int? = null private var currentStatus = false private var playlist = mutableListOf>() private var currentIndex = 0 fun isServiceRunning() = isRunning.get() fun isPlaying() = currentStatus - fun getCurrentUrl(): String? = currentUrlInternal + fun getCurrentId(): Int? = currentIdInternal // 获取播放进度信息 fun getProgress(): Map { @@ -360,14 +360,15 @@ class MusicService : MediaBrowserServiceCompat() { } private fun play(song: Map) { - val url = song["url"] ?: return + val url = song["url"] as? String ?: return Log.i(TAG, "开始播放: $url") + val id = song["id"] as? Int ?: 0 val title = song["title"] as? String ?: "未知标题" val artist = song["artist"] as? String ?: "未知歌手" val coverUrl = song["coverUrl"] as String mediaPlayer?.release() currentStatus = true - currentUrlInternal = url as String + currentIdInternal = id mediaPlayer = MediaPlayer().apply { setDataSource(url) setAudioStreamType(AudioManager.STREAM_MUSIC) diff --git a/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicServicePlugin.kt b/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicServicePlugin.kt index ba83f5209..74ee11e41 100644 --- a/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicServicePlugin.kt +++ b/local_plugins/music_service/android/src/main/kotlin/com/yunqiinnovation/music_service/MusicServicePlugin.kt @@ -63,10 +63,10 @@ class MusicServicePlugin: FlutterPlugin, MethodCallHandler { } "getStatus" -> { val isPlaying = MusicService.isPlaying() - val currentUrl = MusicService.getCurrentUrl() + val currentId = MusicService.getCurrentId() val status = mapOf( "isPlaying" to isPlaying, - "url" to currentUrl + "id" to currentId ) result.success(status) } diff --git a/local_plugins/music_service/lib/music_service.dart b/local_plugins/music_service/lib/music_service.dart index 27c80b8e9..da5516b43 100644 --- a/local_plugins/music_service/lib/music_service.dart +++ b/local_plugins/music_service/lib/music_service.dart @@ -56,7 +56,7 @@ class MusicService { final result = await _methodChannel.invokeMethod('getStatus'); return { 'isPlaying': result?['isPlaying'] ?? false, - 'url': result?['url'] ?? "", + 'id': result?['id'] ?? 0, }; }