使用Flutter audioplayers ^5.2.1时播放音频中断其他应用音乐的问题求助
解决audioplayers播放音频打断其他应用音乐的问题
问题根源在于默认情况下,audioplayers会请求独占音频焦点,导致其他应用的音频被暂停。要实现与其他应用音频共存,需要配置音频会话参数,允许音频混合播放。
具体解决方案
通过AudioContext配置音频会话,分别针对Android和iOS设置对应的音频属性,让应用不抢占音频焦点,同时允许与其他音频混合:
- 修改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()); } }
- 全局配置(可选)
如果应用中有多个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
相关产品推荐
相关产品推荐

