如何在just_audio_background中终止状态下停止音乐播放
实现Flutter音乐仅前台播放的解决方案
要让音乐只在APP前台播放、终止时停止,你需要结合应用生命周期监听和调整just_audio_background的配置,具体操作如下:
1. 调整just_audio_background初始化配置
如果之前初始化just_audio_background时启用了后台播放支持,修改初始化参数,明确禁用后台持久播放的相关设置:
await JustAudioBackground.init( androidNotificationChannelId: 'com.yourapp.channel.audio', androidNotificationChannelName: 'Audio playback', androidNotificationOngoing: false, // 后台时不保留常驻通知 androidStopForegroundOnPause: true, // 暂停播放时自动停止前台服务 );
2. 监听应用生命周期,自动停止播放
通过WidgetsBindingObserver监听APP状态变化,当APP进入后台或终止状态时,主动停止音频播放:
首先让页面的State类混入WidgetsBindingObserver:
class _YourMusicPageState extends State<YourMusicPage> with WidgetsBindingObserver { late AudioPlayer _audioPlayer; @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); _audioPlayer = AudioPlayer(); // 播放器其他初始化逻辑 } @override void dispose() { WidgetsBinding.instance.removeObserver(this); _audioPlayer.dispose(); super.dispose(); } // 监听APP生命周期变化 @override void didChangeAppLifecycleState(AppLifecycleState state) { super.didChangeAppLifecycleState(state); switch (state) { case AppLifecycleState.paused: case AppLifecycleState.detached: case AppLifecycleState.inactive: // 进入后台/终止状态时停止播放 _audioPlayer.stop(); break; case AppLifecycleState.resumed: // 回到前台可选择恢复播放(可选逻辑) // _audioPlayer.play(); break; } } // 你的播放逻辑(整合原有代码) void playTargetAudio(AudioModel audioModel) async { final audio = AudioSource.uri( Uri.parse(audioModel.url), tag: MediaItem( id: audioModel.id.toString(), album: audioModel.album, title: audioModel.title, artUri: Uri.parse(audioModel.image.toString()), ), ); await _audioPlayer.setAudioSource(audio); _audioPlayer.play(); } }
3. 平台端配置清理
- Android:移除AndroidManifest.xml中多余的
FOREGROUND_SERVICE权限(如果之前添加过),避免后台服务持续运行。 - iOS:在Info.plist中删除
UIBackgroundModes里的audio类型配置,禁止APP后台音频能力。
完成以上配置后,APP切换到后台或被终止时音频会自动停止,仅在前台状态下维持播放。
内容的提问来源于stack exchange,提问作者Md Usama
相关产品推荐
相关产品推荐

