Запуск фонового звука на разных страницах приложения UWP

Я делаю приложение 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();

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

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(), но это не сработало.

Есть идеи, как остановить старую песню и воспроизвести текущую?


person yalematta    schedule 31.05.2016    source источник
comment
Вы пробовали вместо этого BackgroundMediaPlayer.Current.Pause()?   -  person H77    schedule 16.06.2016


Ответы (1)


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

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

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

person H77    schedule 31.05.2016