From 9af035429c58549ef30990282c04d7a87f8eaf34 Mon Sep 17 00:00:00 2001 From: lxh2875931338 Date: Fri, 21 Aug 2026 08:54:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/services/audio_player_handler.dart | 34 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/lib/services/audio_player_handler.dart b/lib/services/audio_player_handler.dart index 7722957..b1dfce4 100644 --- a/lib/services/audio_player_handler.dart +++ b/lib/services/audio_player_handler.dart @@ -10,11 +10,13 @@ class AudioPlayerHandler extends BaseAudioHandler { AudioPlayerHandler() { _localAudio = local_audio.AudioService(); + // 监听播放状态 _playback.player.stream.playing.listen((playing) { _updatePlaybackState(playing: playing); _syncMediaItem(); }); + // 监听播放完成 → 自动下一首 _playback.player.stream.completed.listen((_) { debugPrint('🎵 [handler] playback completed, auto next'); _localAudio.next(); @@ -22,6 +24,7 @@ class AudioPlayerHandler extends BaseAudioHandler { _syncMediaItem(); }); + // 监听时长变化 → 更新 MediaItem _playback.player.stream.duration.listen((duration) { final current = mediaItem.value; if (current != null && current.duration != duration) { @@ -32,9 +35,8 @@ class AudioPlayerHandler extends BaseAudioHandler { void _syncMediaItem() { final song = _localAudio.currentSong; - debugPrint( - '🎵 [handler] _syncMediaItem: currentSong = ${song?.title ?? "null"}'); if (song != null) { + debugPrint('🎵 [handler] syncing media item: ${song.title}'); mediaItem.add(MediaItem( id: song.id, title: song.title, @@ -123,34 +125,40 @@ class AudioPlayerHandler extends BaseAudioHandler { _syncMediaItem(); } + // ⭐ 核心修复:正确区分 play 和 pause @override Future click([MediaButton button = MediaButton.media]) async { - debugPrint( - '🎵 [audio_service] click(): ${button.name} (index: ${button.index})'); + debugPrint('🎵 [audio_service] click(): ${button.name} (index: ${button.index})'); final name = button.name.toLowerCase(); - if (name.contains('play') || name.contains('media')) { - debugPrint('🎵 → play() via click'); - await play(); - return; - } + // ⭐ 优先处理 pause(蓝牙 PAUSE 会进入这里) if (name.contains('pause')) { - debugPrint('🎵 → pause() via click'); + debugPrint('🎵 → pause()'); await pause(); return; } + + // 处理 play(包括 media 类型的按钮) + if (name.contains('play') || name.contains('media')) { + debugPrint('🎵 → play()'); + await play(); + return; + } + if (name.contains('next') || name.contains('skip_next')) { - debugPrint('🎵 → skipToNext() via click'); + debugPrint('🎵 → skipToNext()'); await skipToNext(); return; } + if (name.contains('previous') || name.contains('skip_previous')) { - debugPrint('🎵 → skipToPrevious() via click'); + debugPrint('🎵 → skipToPrevious()'); await skipToPrevious(); return; } + // fallback:根据当前播放状态 toggle debugPrint('🎵 → fallback toggle'); if (_playback.player.state.playing) { await pause(); @@ -158,4 +166,4 @@ class AudioPlayerHandler extends BaseAudioHandler { await play(); } } -} +} \ No newline at end of file