(UWP)如何像Groove一样激活“任务栏迷你播放器”

4
我使用BackgroundMediaPlayer在我的应用程序中播放背景音频。现在我看到这些按钮:Buttons。如何激活它们?
2个回答

2
为了使任务栏中的媒体控件正常工作,您需要从前台应用程序和后台任务加载并配置SystemMediaTransportControls。如果仅从后台任务进行操作,则控件将显示但仍然被禁用。
在您的前台应用程序中,您应该具有以下代码:
var smtc = SystemMediaTransportControls.GetForCurrentView();
smtc.ButtonPressed += smtc_ButtonPressed;
smtc.PropertyChanged += smtc_PropertyChanged;
smtc.IsEnabled = true;
smtc.IsPauseEnabled = true;
smtc.IsPlayEnabled = true;
smtc.IsNextEnabled = true;
smtc.IsPreviousEnabled = true;

在后台任务中,你应该有:

smtc = BackgroundMediaPlayer.Current.SystemMediaTransportControls;
smtc.ButtonPressed += smtc_ButtonPressed;
smtc.PropertyChanged += smtc_PropertyChanged;
smtc.IsEnabled = true;
smtc.IsPauseEnabled = true;
smtc.IsPlayEnabled = true;
smtc.IsNextEnabled = true;
smtc.IsPreviousEnabled = true;

请注意,获取控制实例的 API 不同:
在前台应用中使用 SystemMediaTransportControls.GetForCurrentView(), 在后台任务中使用BackgroundMediaPlayer.Current.SystemMediaTransportControls
您需要在两个(前景和后景)中支持按钮按下事件。

你好,这个方法在后台音频的双进程模型中还有效吗?因为在我的情况下,即使音频仍在播放,当应用程序进入后台时,系统播放器控件也无法使用。在启动后台音频的单进程模型后,我们需要更改任何内容吗?请注意,我不能将整个应用程序从双进程模型切换到单进程模型。感谢您的帮助 - Keval Langalia
这应该仍然可行。双进程模型已被弃用,但仍在工作。您应该分享您所做的调查进展。这里有一些良好的解释:链接 - Vincent

1
那是系统媒体传输控件,您需要添加处理点击事件的代码。
这里是官方示例:
public MainPage()
{
this.InitializeComponent();

// Hook up app to system transport controls.
systemMediaControls = SystemMediaTransportControls.GetForCurrentView();
systemMediaControls.ButtonPressed += SystemControls_ButtonPressed;

// Register to handle the following system transpot control buttons.
systemMediaControls.IsPlayEnabled = true;
systemMediaControls.IsPauseEnabled = true;
}

async void SystemControls_ButtonPressed(SystemMediaTransportControls sender,
SystemMediaTransportControlsButtonPressedEventArgs args)
{
switch (args.Button)
  {
    case SystemMediaTransportControlsButton.Play:
        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
        {
            mediaElement.Play();
        });
        break;
    case SystemMediaTransportControlsButton.Pause:
        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
        {
            mediaElement.Pause();
        });
        break;
    default:
        break;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接