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

使用Flutter audioplayers ^5.2.1时播放音频中断其他应用音乐的问题求助

解决audioplayers播放音频打断其他应用音乐的问题

问题根源在于默认情况下,audioplayers会请求独占音频焦点,导致其他应用的音频被暂停。要实现与其他应用音频共存,需要配置音频会话参数,允许音频混合播放。

具体解决方案

通过AudioContext配置音频会话,分别针对Android和iOS设置对应的音频属性,让应用不抢占音频焦点,同时允许与其他音频混合:

  1. 修改AudioPlayer初始化代码
    在创建AudioPlayer实例时,添加setAudioContext配置,指定允许混合的音频会话参数:
import 'package:audioplayers/audioplayers.dart';

AudioPlayer bgMusic1 = AudioPlayer()
  ..setAudioContext(AudioContext(
    audioSessionConfiguration: AudioSessionConfiguration(
      // Android配置:不请求音频焦点,允许混合
      android: AndroidAudioSessionConfiguration(
        audioAttributes: const AndroidAudioAttributes(
          usage: AndroidAudioUsage.game, // 根据场景选择,按钮音效可改用AndroidAudioUsage.sonification
          contentType: AndroidAudioContentType.music,
        ),
        audioFocusGainType: AndroidAudioFocusGainType.none, // 不获取音频焦点
        isContentSpatialized: false,
      ),
      // iOS配置:允许与其他音频混合
      ios: const IOSAudioSessionConfiguration(
        category: IOSAudioSessionCategory.ambient, // ambient模式跟随系统静音键,需后台播放可改用playback并保留mixWithOthers
        options: [IOSAudioSessionOption.mixWithOthers],
      ),
    ),
  ))
  ..setSourceAsset('audios/bgmusic1.mp3')
  ..setVolume(0.02)
  ..setReleaseMode(ReleaseMode.loop);

playBackgroundMusic() {
  try {
    bgMusic1.play(AssetSource('audios/bgmusic1.mp3'));
  } catch (exception) {
    debugPrint(exception.toString());
  }
}
  1. 全局配置(可选)
    如果应用中有多个AudioPlayer实例,可在应用启动时全局设置音频上下文,避免重复配置:
void main() {
  AudioPlayer.global.setAudioContext(AudioContext(
    audioSessionConfiguration: AudioSessionConfiguration(
      android: AndroidAudioSessionConfiguration(
        audioAttributes: const AndroidAudioAttributes(
          usage: AndroidAudioUsage.game,
          contentType: AndroidAudioContentType.music,
        ),
        audioFocusGainType: AndroidAudioFocusGainType.none,
      ),
      ios: const IOSAudioSessionConfiguration(
        category: IOSAudioSessionCategory.ambient,
        options: [IOSAudioSessionOption.mixWithOthers],
      ),
    ),
  ));
  runApp(const MyApp());
}

关键配置说明

  • Android: audioFocusGainType.none 表示应用不请求音频焦点,不会打断其他应用的音频播放;audioAttributes需根据音频类型选择(比如按钮音效用AndroidAudioUsage.sonification)。
  • iOS: IOSAudioSessionCategory.ambient 允许音频与其他应用混合,且会跟随系统静音键静音;如果需要应用在后台也能播放音频,可以改用IOSAudioSessionCategory.playback,并保留mixWithOthers选项。

测试时,先打开YouTube Music播放音乐,再启动你的应用播放音频,即可验证是否不会打断其他应用的音乐。

内容的提问来源于stack exchange,提问作者Ömer Günaydin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:25:11