Windows 10 BackgroundMediaPlayer SystemTransportControls 暂停按钮不工作

Windows 10 BackgroundMediaPlayer SystemTransportControls Pause Button Not Working

我最近决定在我的应用程序中添加对播客的背景音频播放支持。我已经完成了大部分工作,但是 BackgroundMediaPlayer 的 SystemTransportControls 中的暂停按钮似乎没有任何作用。

这是我的后台音频任务class文件:

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

请务必注意,音频会在后台开始播放,但我无法暂停音频。

谢谢, P.

要响应 SystemMediaTransportControls (SMTC) 并处理每个通用音量控制 (UVC) 按钮:播放、暂停、下一首和上一首,我们需要在 Run 方法中处理 SystemMediaTransportControls.ButtonPressed event,如下所示:

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;
    }
}

完整示例请参考官方Background audio sample on GitHub, especially the MyBackgroundAudioTask class. And there is also a very nice post that will walk you through setting up background audio, reacting to device media controls, communicating with the background media player, and managing playlists. Read more at The Basics of Background Audio