我最近决定在我的应用程序中添加对播客的背景音频播放支持。我已经完成了大部分工作,但是 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 event在 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;
}
}
完整样例请引用官方Background audio sample在 GitHub 上,尤其是 MyBackgroundAudioTask class .还有一篇非常不错的帖子,它将引导您完成设置背景音频、对设备媒体控制使用react、与背景媒体播放器通信以及管理播放列表。在 The Basics of Background Audio 阅读更多内容.
关于c# - Windows 10 BackgroundMediaPlayer SystemTransportControls 暂停按钮不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189363/