.NET MAUI移动端应用:最小化窗口时停止背景音乐的方法
.NET MAUI 实现应用最小化时停止背景音乐的正确方式
你的代码使用ContentPage.Disappearing事件来停止音乐,但这个事件的触发场景不只是应用最小化——当页面被导航到其他页面时,该事件也会触发,无法精准匹配“应用最小化”的需求。以下是两种精准实现的方案:
方案一:通过App类的生命周期方法处理
应用级的生命周期回调能精准捕获进入后台(最小化)和回到前台的状态,推荐使用这种方式:
- 在
App.xaml.cs中重写OnSleep和OnResume方法,并维护音乐播放器的全局引用:
public partial class App : Application { // 存储全局音乐播放器引用 public MediaElement? MusicPlayer { get; set; } public App() { InitializeComponent(); MainPage = new NavigationPage(new StartPage()); } // 应用进入后台(最小化)时触发 protected override void OnSleep() { base.OnSleep(); MusicPlayer?.Stop(); } // 应用回到前台时触发(可选恢复播放) protected override void OnResume() { base.OnResume(); // 如果需要回到前台自动继续播放,取消下面的注释 // MusicPlayer?.Play(); } }
- 在
StartPage的构造函数中,将页面内的mediaElement赋值给App的全局引用:
public partial class StartPage : ContentPage { public StartPage() { InitializeComponent(); // 将页面的MediaElement关联到App的全局引用 ((App)Application.Current).MusicPlayer = mediaElement; } }
方案二:在页面中订阅应用生命周期事件
如果不想维护全局引用,也可以直接在页面内订阅应用的Sleeping和Resuming事件:
public partial class StartPage : ContentPage { public StartPage() { InitializeComponent(); // 订阅应用进入后台和回到前台的事件 Application.Current.Sleeping += OnAppSleeping; Application.Current.Resuming += OnAppResuming; } private void OnAppSleeping(object? sender, EventArgs e) { mediaElement.Stop(); } private void OnAppResuming(object? sender, EventArgs e) { // 可选:回到前台时恢复播放 // mediaElement.Play(); } // 页面销毁时取消事件订阅,避免内存泄漏 protected override void OnDisappearing() { base.OnDisappearing(); Application.Current.Sleeping -= OnAppSleeping; Application.Current.Resuming -= OnAppResuming; } }
内容的提问来源于stack exchange,提问作者fullbrain
相关产品推荐
相关产品推荐

