3

我最近決定在我的應用程序中爲播客添加背景音頻播放支持。我已經掌握了大部分工作,但BackgroundMediaPlayer的SystemTransportControls中的暫停按鈕似乎沒有任何作用。Windows 10 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(); 
    } 
} 

重要的是要注意的是,音頻無法開始播放的背景,但我沒有暫停音頻的能力是非常重要的。

感謝, P.

回答

1

作出反應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; 
    } 
} 

有關完整示例,請參閱GitHub上的官方Background audio sample,尤其是MyBackgroundAudioTask class。還有一個非常好的帖子,可以引導您設置背景音頻,響應設備媒體控件,與後臺媒體播放器進行通信以及管理播放列表。閱讀更多信息,請致電The Basics of Background Audio