如何使用flutter_sound在Flutter中搭建支持后台及通知控制的音频播放器
基于flutter_sound实现仅URL音频播放+通知栏控制的精简方案
官方示例混杂了录音、本地音频播放、URL播放等多场景代码,你只需删除所有录音相关逻辑,保留播放模块的核心配置即可:
具体调整步骤
- 初始化仅保留播放器实例
完全移除FlutterSoundRecorder相关的所有实例声明、初始化、录音权限申请代码,仅初始化播放需要的FlutterSoundPlayer实例,仅申请网络、前台服务、后台音频播放所需权限即可。
final FlutterSoundPlayer _player = FlutterSoundPlayer(); // 初始化代码 await _player.openPlayer();
- 配置音频会话为纯播放模式
设置音频会话时仅保留播放相关配置,不需要录入相关参数:
await _player.setAudioSession( category: AudioSessionCategory.playback, mode: AudioSessionMode.mediaPlayback, audioFlags: allowHeadset | allowBluetooth | allowSpeaker, );
- 实现URL播放逻辑
直接调用startPlayer方法传入音频URL即可,不需要关联本地文件、录音缓存相关参数:
await _player.startPlayer( fromURI: '你的目标音频URL', whenFinished: () { // 自定义播放完成后的回调逻辑 }, );
- 精简通知栏控制配置
配置通知栏回调时,移除录音相关的控制按钮,仅保留播放需要的控制项即可:
_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, ); });
- 页面销毁逻辑精简
仅销毁播放器实例即可:
@override void dispose() { _player.closePlayer(); super.dispose(); }
注意事项
- 所有和录音相关的代码可完全删除,不会对音频播放、通知栏控制功能产生任何影响
- 单音频播放场景可直接移除通知栏的上一首/下一首控制按钮,避免无效交互
- 后台播放需要提前完成平台配置:Android端在AndroidManifest.xml中添加前台服务权限,iOS端在Xcode中开启Background Modes的Audio播放权限
内容的提问来源于stack exchange,提问作者Kaleb
相关产品推荐
相关产品推荐

