Flutter中如何让just_audio不打断iOS后台音频播放?
iOS Flutter应用实现提示音播放时压低后台音频并恢复
核心思路
利用iOS音频会话的Ducking机制,通过audio_session包配置会话参数,让系统自动处理后台音频的压低与恢复,无需手动调整音量。
步骤实现
- 添加依赖
在pubspec.yaml中引入所需包:
dependencies: just_audio: ^0.9.34 audio_session: ^0.1.16
- 配置音频会话
初始化时设置会话类别与选项,启用混音和自动压低后台音频:
import 'package:audio_session/audio_session.dart'; import 'package:just_audio/just_audio.dart'; Future<void> _configureAudioSession() async { final session = await AudioSession.instance; await session.configure(AudioSessionConfiguration( avAudioSessionCategory: AVAudioSessionCategory.playback, avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.mixWithOthers | AVAudioSessionCategoryOptions.duckOthers, avAudioSessionMode: AVAudioSessionMode.defaultMode, avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.notifyOthersOnDeactivation, )); }
- 播放提示音逻辑
加载并播放提示音,播放完成后释放资源以触发会话停用,让后台音频自动恢复:
final AudioPlayer _player = AudioPlayer(); Future<void> playNotificationTone() async { await _configureAudioSession(); // 加载本地提示音资源(替换为你的文件路径) await _player.setAsset('assets/tones/notification.mp3'); await _player.play(); // 播放结束后释放播放器,触发会话停用 _player.playerStateStream.listen((state) { if (state.processingState == ProcessingState.completed) { _player.dispose(); } }); }
关键说明
- iOS系统会通过
duckOthers选项自动将后台音频音量降低约50%,提示音播放结束后,会话停用,系统自动恢复后台音频音量。 - 无需手动控制第三方音频的音量,完全依赖系统音频会话机制实现,兼容性更好。
- 测试时需确保后台有正在播放的音频(如Apple Music、有声书),验证压低与恢复效果。
内容的提问来源于stack exchange,提问作者Alex Lomia
相关产品推荐
相关产品推荐

