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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:44:58