3

최근에 내 앱에서 팟 캐스트에 배경 음악 재생 지원 기능을 추가하기로 결정했습니다. 대부분 작동하지만 BackgroundMediaPlayer의 SystemTransportControls에있는 pause 버튼은 아무 것도하지 않는 것 같습니다.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에서 자세한 내용을 읽어보십시오.

관련 문제