MAUI怎么在后台播放音乐 MAUI后台音频播放

来源:这里教程网 时间:2026-02-21 17:35:11 作者:

MAUI 本身不原生支持后台音频播放,必须结合各平台的底层机制来实现。核心在于两件事:一是让系统允许你的 App 在后台继续运行音频任务;二是用平台原生能力(如 Android 的

MediaPlayer
、iOS 的
AVAudioSession
)接管播放逻辑,并正确配置生命周期行为。

Android 平台:启用后台服务 + 正确声明权限

单纯用

MediaPlayer
在前台 Activity 中播放,App 进入后台后会被系统暂停或回收。要持续播放,推荐使用 前台 Service(Foreground Service),并配合通知栏常驻提醒:

AndroidManifest.xml
中添加权限和前台服务声明:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"></uses-permission>

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"></uses-permission>
(Android 13+ 必需)
创建一个继承
Service
的类(如
MusicForegroundService
),在
onStartCommand
中调用
startForeground(id, notification)
把播放控制逻辑(播放/暂停/进度更新)封装进该 Service,通过
Intent
或绑定方式与 UI 通信
不要在 Activity 中直接 new MediaPlayer 并长期持有——它无法跨进程存活,且易被系统杀死

iOS 平台:配置后台模式 + 设置 AVAudioSession

iOS 对后台音频限制严格,仅靠 Info.plist 配置不够,还需代码层激活音频会话:

Info.plist
中添加:
<key>UIBackgroundModes</key>

<array><string>audio</string></array>
在 App 启动时(如
AppDelegate
或 MAUI 的
MauiProgram.cs
初始化阶段)配置
AVAudioSession

var session = AVAudioSession.SharedInstance();

session.SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.MixWithOthers);

session.SetActive(true);
务必调用
SetActive(true)
,否则后台播放不会生效;若需锁屏控制,还需启用远程命令(
UIApplication.SharedApplication.BeginReceivingRemoteControlEvents()

MAUI 跨平台整合要点

不能把平台逻辑写死在共享项目里,要用依赖注入 + 接口抽象:

定义统一接口,如
IAudioPlayer
(含
Play()
Pause()
Stop()
IsPlaying
等)
Android 实现类中启动 Foreground Service 并委托播放;iOS 实现类中管理
AVPlayer
实例和会话状态
MauiProgram.cs
中注册为 Singleton:
builder.Services.AddSingleton<iaudioplayer audioplayerimplementation>();</iaudioplayer>
ViewModel 中只依赖
IAudioPlayer
,完全解耦平台细节

常见失效原因与检查清单

后台播放失败,90% 出在这几处:

Android:没加
FOREGROUND_SERVICE
权限,或没调用
startForeground()
→ 系统强制停止 Service
iOS:Info.plist 缺少
UIBackgroundModes
,或代码中漏掉
SetActive(true)
→ 进后台瞬间音频中断
MAUI:服务未在
MauiProgram.cs
注册,或 ViewModel 拿到的是 null 实例 → 播放调用静默失败
通用:音频文件路径错误(尤其是 iOS Bundle 资源路径需用
NSBundle.MainBundle.PathForResource
获取)

基本上就这些。后台播放不是“打开开关”就能行的事,而是平台能力、系统策略、MAUI 架构三者对齐的结果。每一步都得踩准,缺一不可。

相关推荐