You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter audio_service通知栏无法显示歌曲信息及进度条无响应问题

问题诊断与解决方案

一、通知栏不显示曲目元数据的核心原因

1. 未向mediaItem流发送当前曲目信息

audio_service的通知UI完全依赖AudioHandler中的mediaItem流获取元数据,你的代码仅将MediaItem绑定到音频源的tag,但从未主动推送当前播放的曲目信息到该流中。

修复方案:
在播放触发时(如play方法)或曲目切换时,更新mediaItem流:

@override
Future<void> play() async {
  if (_songQueue.isNotEmpty) {
    final currentSource = _songQueue[queueIndex ?? 0];
    final currentMediaItem = _mediaItemExpando[currentSource];
    if (currentMediaItem != null) {
      mediaItem.add(currentMediaItem); // 推送当前曲目元数据
    }
    await _player.play(currentSource);
  }
  await super.play();
}

也可以在_broadcastState中结合播放事件自动更新:

void _broadcastState(PlaybackEvent event) {
  // ... 原有代码
  MediaItem? currentMediaItem;
  if (event.currentIndex != null && event.currentIndex! < _songQueue.length) {
    currentMediaItem = _mediaItemExpando[_songQueue[event.currentIndex!]];
  }
  if (currentMediaItem != null) {
    mediaItem.add(currentMediaItem);
  }
  // ... 更新playbackState的代码
}

2. 未同步更新queue流

你的addQueueItem仅将音频源加入自定义的_songQueue,但未同步更新audio_service的queue流,导致系统无法感知播放队列的存在。

修复方案:

@override
Future<void> addQueueItem(MediaItem mediaItem) async {
  final audioSource = _createAudioSource(mediaItem);
  _songQueue.add(audioSource);
  // 将队列中的MediaItem同步到audio_service的queue流
  queue.add(_songQueue.map((source) => _mediaItemExpando[source]!).toList());
}

二、进度条无法拖动的原因

1. 未实现seek方法

虽然你在playbackState中声明了支持MediaAction.seek,但未在AudioHandler中实现seek逻辑,系统拖动事件无法传递到播放器。

修复方案:

@override
Future<void> seek(Duration position) async {
  await _player.seek(position);
  await super.seek(position);
}

2. playbackState缺少音频时长信息

进度条需要知道音频总时长才能正常交互,你需要在_broadcastState中补充duration字段:

playbackState.add(playbackState.value.copyWith(
  // ... 原有字段
  duration: _player.duration, // 添加音频时长
));

三、额外检查项

  • 确认MediaItem的id字段不为空:audio_service要求每个曲目必须有唯一id,否则元数据可能无法被正确识别。
  • 提升通知渠道优先级:在AudioServiceConfig中添加androidNotificationChannelImportance: AndroidNotificationChannelImportance.high,避免通知被系统压缩显示。

内容的提问来源于stack exchange,提问作者Max Anders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 23:32:13