2016-05-31 2 views
1

Я создаю приложение UWP, в котором я запускаю фоновое аудио в MainPage на событии Click Button. Когда я перехожу на другую страницу, в фоновом фоновом режиме есть другой медиафайл.Запуск фонового звука на разных страницах приложения UWP

Как я могу остановить текущую игру, чтобы запустить другую? Должен ли я определить что-то глобальное? Любая помощь по этой проблеме?

Редактировать

Я использую этот пример: https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundAudio Хотя backgroundAudio первой страницы работает, я иду на вторую страницу и на событие щелчка я установил новый список с помощью следующего кода:

// 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(); 

Но новая песня занимает больше, чем расчетное время для запуска и ввода ELSE этого метода:

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, используя BackgroundMediaPLayer.Shutdown(), но это не сработало.

Любая идея, как остановить старую песню и текущую песню?

+0

Вы попробовали BackgroundMediaPlayer.Current.Pause() вместо этого? – H77

ответ

0

Вы можете управлять фоновым медиаплеером, отправив ему сообщения с переднего плана. Например,

от переднего плана приложения:

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-адреса прямого потока в фоновое задание в качестве значения.

Смежные вопросы