c# - Windows 10 BackgroundMediaPlayer SystemTransportControls 暂停按钮不工作

标签 c# uwp windows-10-universal windows-10-mobile background-audio

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

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

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

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

谢谢,

最佳答案

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

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在 GitHub 上,尤其是 MyBackgroundAudioTask class .还有一篇非常不错的帖子,它将引导您完成设置背景音频、对设备媒体控制使用react、与背景媒体播放器通信以及管理播放列表。在 The Basics of Background Audio 阅读更多内容.

关于c# - Windows 10 BackgroundMediaPlayer SystemTransportControls 暂停按钮不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189363/

相关文章:

c# - 构建失败 : Outlook 2010 VSTO Add-In

windows - 如何从 SoftwareBitmap (UWP) 中正确释放 BitmapBuffer?

c# - Windows 10 手机 UWP 生命周期文本框

c# - 如何在 UWP 上加载 Split View内容的框架传递参数中的页面?

c# - 隐藏/显示 XAML 元素或阻止 LostFocus 事件

c# - 从 F# 使用 UWP 应用服务

c# 包含单词异常编号

c# - 在项目之间合并 web.configs

c# - WorkItem.Links.Contains() 它有什么作用?

c# - UWP:显示排列成圆圈的 ListView 项目