MAUI后台音频播放需平台原生支持:Android用前台服务+权限声明,iOS配置后台模式+AVAudioSession激活;通过依赖注入抽象IAudioPlayer接口实现跨平台解耦,常见失败原因包括权限缺失、未调用startForeground或SetActive(true)、服务未注册等。
MAUI 本身不原生支持后台音频播放,必须结合各平台的底层机制来实现。核心在于两件事:一是让系统允许你的 App 在后台继续运行音频任务;二是用平台原生能力(如 Android 的 MediaPlayer、iOS 的 AVAudioSession)接管播放逻辑,并正确配置生命周期行为。
单纯用 MediaPlayer 在前台 Activity 中播放,App 进入后台后会被系统暂停或回收。要持续播放,推荐使用 前台 Service(Foreground Service),并配合通知栏常驻提醒:
AndroidManifest.xml 中添加权限和前台服务声明:(Android 13+ 必需)Service 的类(如 MusicForegroundService),在 onStartCommand 中调用 startForeground(id, notification)
Intent 或绑定方式与 UI 通信iOS 对后台音频限制严格,仅靠 Info.plist 配置不够,还需代码层激活音频会话:
Info.plist 中添加:UIBackgroundModes audio
AppDelegate 或 MAUI 的 MauiProgram.cs 初始化阶段)配置 AVAudioSession:var session = AVAudioSession.SharedInstance();session.SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.MixWithOthers);session.SetActive(true);
SetActive(true),否则后台播放不会生效;若需锁屏控制,还需启用远程命令(UIApplication.SharedApplication.BeginReceivingRemoteControlEvents())不能把平台逻辑写死在共享项目里,要用依赖注入 + 接口抽象:
IAudioPlayer(含 Play()、Pause()、Stop()、IsPlaying 等)AVPlayer 实例和会话状态MauiProgram.cs 中注册为 Singleton:builder.Services.AddSingleton();
IAudioPlayer,完全解耦平台细节后台播放失败,90% 出在这几处:
FOREGROUND_SERVICE 权限,或没调用 startForeground() → 系统强制停止 ServiceUIBackgroundModes,或代码中漏掉 SetActive(true) → 进后台瞬间音频中断Mau
iProgram.cs 注册,或 ViewModel 拿到的是 null 实例 → 播放调用静默失败NSBundle.MainBundle.PathForResource 获取)基本上就这些。后台播放不是“打开开关”就能行的事,而是平台能力、系统策略、MAUI 架构三者对齐的结果。每一步都得踩准,缺一不可。