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

如何使用flutter_sound在Flutter中搭建支持后台及通知控制的音频播放器

基于flutter_sound实现仅URL音频播放+通知栏控制的精简方案

官方示例混杂了录音、本地音频播放、URL播放等多场景代码,你只需删除所有录音相关逻辑,保留播放模块的核心配置即可:

具体调整步骤

  1. 初始化仅保留播放器实例
    完全移除FlutterSoundRecorder相关的所有实例声明、初始化、录音权限申请代码,仅初始化播放需要的FlutterSoundPlayer实例,仅申请网络、前台服务、后台音频播放所需权限即可。
final FlutterSoundPlayer _player = FlutterSoundPlayer();

// 初始化代码
await _player.openPlayer();
  1. 配置音频会话为纯播放模式
    设置音频会话时仅保留播放相关配置,不需要录入相关参数:
await _player.setAudioSession(
  category: AudioSessionCategory.playback,
  mode: AudioSessionMode.mediaPlayback,
  audioFlags: allowHeadset | allowBluetooth | allowSpeaker,
);
  1. 实现URL播放逻辑
    直接调用startPlayer方法传入音频URL即可,不需要关联本地文件、录音缓存相关参数:
await _player.startPlayer(
  fromURI: '你的目标音频URL',
  whenFinished: () {
    // 自定义播放完成后的回调逻辑
  },
);
  1. 精简通知栏控制配置
    配置通知栏回调时,移除录音相关的控制按钮,仅保留播放需要的控制项即可:
_player.setNotificationHandler((PlaybackDisposition disposition) async {
  return NotificationDisposition(
    title: '自定义音频标题',
    artist: '自定义音频作者',
    albumArtUrl: '自定义音频封面URL',
    // 仅保留需要的控制按钮,单音频场景可直接删除切歌类按钮
    actions: [
      NotificationAction.playPause,
      NotificationAction.stop,
    ],
    progress: disposition.duration.inMilliseconds > 0 
        ? disposition.position.inMilliseconds / disposition.duration.inMilliseconds 
        : 0,
  );
});
  1. 页面销毁逻辑精简
    仅销毁播放器实例即可:
@override
void dispose() {
  _player.closePlayer();
  super.dispose();
}

注意事项

  • 所有和录音相关的代码可完全删除,不会对音频播放、通知栏控制功能产生任何影响
  • 单音频播放场景可直接移除通知栏的上一首/下一首控制按钮,避免无效交互
  • 后台播放需要提前完成平台配置:Android端在AndroidManifest.xml中添加前台服务权限,iOS端在Xcode中开启Background Modes的Audio播放权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:30:02