【发布时间】:2024-01-18 10:48:01
【问题描述】:
【问题讨论】:
标签: background media-player uwp windows-10-universal
【问题讨论】:
标签: background media-player uwp windows-10-universal
为了使任务栏中的媒体控件正常工作,您需要从前台应用程序和后台任务加载和配置 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 在后台任务中。
你将不得不支持两个(前景+背景)中的按钮按下事件
【讨论】:
那是System Media Transport Controls,您应该添加代码来处理点击事件。
这是官方示例:
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;
}
}
【讨论】: