在UWP App的不同页面中运行背景音频

我正在制作一个UWP应用程序,我在Button Click事件的MainPage中运行Background Audio。 当我移动到另一个页面时,还有一个不同的媒体可以在那里播放背景音频任务。

如何阻止当前播放的任务运行另一个? 我应该全球定义什么? 有关此问题的任何帮助?

编辑

我正在使用这个示例: https : //github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundAudio当第一页的backgroundAudio正在运行时,我转到第二页和点击事件我用以下代码设置了一个新的List:

// First update the persisted start track ApplicationSettingsHelper.SaveSettingsValue(ApplicationSettingsConstants.TrackId, RadioFacade.mySongs[0].MediaUri.ToString()); //here ApplicationSettingsHelper.SaveSettingsValue(ApplicationSettingsConstants.Position, new TimeSpan().ToString()); // Start task StartBackgroundAudioTask(); 

但是新歌的运行时间超过了估计的时间并输入了此方法的其他内容:

 private void StartBackgroundAudioTask() { AddMediaPlayerEventHandlers(); var startResult = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { bool result = backgroundAudioTaskStarted.WaitOne(10000); //Send message to initiate playback if (result == true) { MessageService.SendMessageToBackground(new UpdatePlaylistMessage(RadioFacade.mySongs)); MessageService.SendMessageToBackground(new StartPlaybackMessage()); } else { throw new Exception("Background Audio Task didn't start in expected time"); } }); startResult.Completed = new AsyncActionCompletedHandler(BackgroundTaskInitializationCompleted); } 

旧的(第一首演奏)歌曲继续播放。

我尝试使用BackgroundMediaPLayer.Shutdown()停止当前的BackgroundMediaPlayer,但它不起作用。

知道怎么让老歌停下来,当下的歌曲播放?

您可以通过从前台向其发送消息来控制后台媒体播放器。 例如,

从前台应用程序:

 BackgroundMediaPlayer.SendMessageToBackground(new ValueSet { {"playnew", "some value"} }); 

在你的后台任务中:

 public sealed class AudioPlayer : IBackgroundTask { public void Run(IBackgroundTaskInstance taskInstance) { BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground; ... ... } private async void BackgroundMediaPlayer_MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e) { object value; if (e.Data.TryGetValue("playnew", out value) && value != null) { // value will be whatever you pass from the foreground. BackgroundMediaPlayer.Current.Pause(); BackgroundMediaPlayer.Current.Source = stream source; BackgroundMediaPlayer.Current.Play(); } } ... } 

“playnew”可以是您应用程序中的全局常量。 您可以使用ValueSet将实时流URL作为值传递给后台任务。