Windows 10 BackgroundMediaPlayer SystemTransportControls Кнопка паузы не работает

Недавно я решил добавить в свое приложение поддержку воспроизведения фонового звука для подкастов. У меня большая часть этого работает, но кнопка паузы в SystemTransportControls BackgroundMediaPlayer, похоже, ничего не делает.

Вот мой файл класса фоновой аудио задачи:

public sealed class AudioPlayer : IBackgroundTask
{
    private BackgroundTaskDeferral _deferral;
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        _deferral = taskInstance.GetDeferral();

        var control = BackgroundMediaPlayer.Current.SystemMediaTransportControls;
        control.IsEnabled = true;
        control.IsPauseEnabled = true;
        control.IsPlayEnabled = true;
        control.IsNextEnabled = false;
        control.IsPreviousEnabled = false;

        taskInstance.Canceled += TaskInstance_Canceled;

        BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground;
    }

    private void TaskInstance_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
    {
        BackgroundMediaPlayer.Shutdown();
        _deferral.Complete();
    }

    void BackgroundMediaPlayer_MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)
    {
        object obj;
        e.Data.TryGetValue("MessageBody", out obj);

        string url = (string)obj;
        url = url.Replace("\"", "");
        var source = MediaSource.CreateFromUri(new Uri(url, UriKind.Absolute));

        var list = new MediaPlaybackList();
        list.Items.Add(new MediaPlaybackItem(source));

        BackgroundMediaPlayer.Current.Source = list;
        BackgroundMediaPlayer.Current.Play();
    }
}

Важно отметить, что звук начинает воспроизводиться в фоновом режиме, но у меня нет возможности приостановить звук.

Спасибо, П.


person Pranav Kulkarni    schedule 04.07.2016    source источник


Ответы (1)


Чтобы реагировать на SystemMediaTransportControls (SMTC) и обрабатывать каждую кнопку универсального регулятора громкости (UVC): воспроизведение, пауза, следующий и предыдущий, нам нужно обрабатывать событие SystemMediaTransportControls.ButtonPressed в методе Run следующим образом:

public void Run(IBackgroundTaskInstance taskInstance)
{
    var control = BackgroundMediaPlayer.Current.SystemMediaTransportControls;
    control.ButtonPressed += control_ButtonPressed;
    ...
}

И в методе control_ButtonPressed работайте с разными кнопками, например:

private void control_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
{
    switch (args.Button)
    {
        case SystemMediaTransportControlsButton.Play:
            //Todo with play
            break;
        case SystemMediaTransportControlsButton.Pause:
            //Todo with pause
            break;
        case SystemMediaTransportControlsButton.Next:
            //Todo with skip to next;
            break;
        case SystemMediaTransportControlsButton.Previous:
            //Todo with skip to previous;
            break;
    }
}

Полный образец можно найти в официальном примере фонового звука на GitHub, особенно Класс MyBackgroundAudioTask. Кроме того, есть очень хороший пост, в котором вы узнаете, как настроить фоновый звук, реагировать на элементы управления мультимедиа на устройстве, общаться с фоновым медиаплеером и управлять списками воспроизведения. Подробнее читайте на странице Основы фонового звука.

person Jay Zuo    schedule 05.07.2016