UWP MediaPlayer重定向应用实例后旧音频仍播放问题求助
解决思路
让已存在的实例响应新激活请求
目前的重定向只是把激活请求转给了旧实例,但旧实例没有处理这个新请求来停止播放。需要在App类中重写OnActivated方法,当收到新的文件激活事件时,先终止当前MediaPlayer的播放,再加载新文件。全局持有MediaPlayer实例
将MediaPlayer实例放在App类或者全局可访问的位置,这样在处理新激活时,能直接调用它的Pause()方法,或者设置Source = null来彻底终止音频输出。修改App类的激活处理逻辑
示例代码参考:protected override void OnActivated(IActivatedEventArgs args) { base.OnActivated(args); if (args is FileActivatedEventArgs fileArgs) { // 获取页面中的MediaPlayer实例(假设MainPage里有公开的MediaPlayer属性) var mainPage = Window.Current.Content as MainPage; if (mainPage?.MediaPlayer != null) { if (mainPage.MediaPlayer.PlaybackSession.PlaybackState == MediaPlaybackState.Playing) { mainPage.MediaPlayer.Pause(); // 也可以直接清空播放源:mainPage.MediaPlayer.Source = null; } } // 处理新文件的加载逻辑,比如导航到页面并传递文件 var rootFrame = Window.Current.Content as Frame; if (rootFrame == null) { rootFrame = new Frame(); Window.Current.Content = rootFrame; } rootFrame.Navigate(typeof(MainPage), fileArgs.Files.FirstOrDefault()); Window.Current.Activate(); } }确认实例注册逻辑的一致性
你当前代码里给媒体文件统一用playbackMedia作为实例键是正确的,确保所有媒体文件都会重定向到同一个实例。关键是要让这个旧实例在收到新激活请求时,执行停止旧播放、加载新内容的操作。
内容的提问来源于stack exchange,提问作者lmaoezzz
相关产品推荐
相关产品推荐

