2016-05-31 11 views
1

버튼 클릭 이벤트에서 MainPage에서 배경 오디오를 실행하는 UWP 앱을 만들고 있습니다. 다른 페이지로 이동하면 배경 오디오 작업에서 재생할 다른 미디어도 있습니다.UWP 앱의 다른 페이지에서 배경 오디오 실행

어떻게하면 현재 재생중인 작업이 다른 작업을 실행하지 못하게 할 수 있습니까? 전 세계적으로 무언가를 정의해야합니까? 이 문제와 관련된 도움이 필요하십니까?

편집 나는이 샘플 사용하고

: 첫 번째 페이지의 backgroundAudio이 실행되는 동안 https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundAudio, 나는 두 번째 페이지로 이동하여 클릭 이벤트에 내가 다음 코드를 사용하여 새로운 목록을 설정

// First update the persisted start track 
    ApplicationSettingsHelper.SaveSettingsValue(ApplicationSettingsConstants.TrackId, RadioFacade.mySongs[0].MediaUri.ToString()); //here 
      ApplicationSettingsHelper.SaveSettingsValue(ApplicationSettingsConstants.Position, new TimeSpan().ToString()); 

       // Start task 
       StartBackgroundAudioTask(); 

그러나 새로운 노래는이 방법의 다른 실행하고 입력 할 예상 시간보다 더 걸리는 :

private void StartBackgroundAudioTask() 
     { 
      AddMediaPlayerEventHandlers(); 

      var startResult = this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
      { 
       bool result = backgroundAudioTaskStarted.WaitOne(10000); 
       //Send message to initiate playback 
       if (result == true) 
       { 
        MessageService.SendMessageToBackground(new UpdatePlaylistMessage(RadioFacade.mySongs)); 
        MessageService.SendMessageToBackground(new StartPlaybackMessage()); 
       } 
       else 
       { 
        throw new Exception("Background Audio Task didn't start in expected time"); 
       } 
      }); 
      startResult.Completed = new AsyncActionCompletedHandler(BackgroundTaskInitializationCompleted); 
     } 
,369을

및 이전 (첫 번째 재생) 노래가 계속 재생됩니다.

BackgroundMediaPLayer.Shutdown()을 사용하여 현재 BackgroundMediaPlayer를 중지하려고했지만 작동하지 않았습니다.

오래된 노래를 중단하고 현재 노래를 재생하는 방법을 알려주세요.

+0

대신 BackgroundMediaPlayer.Current.Pause()를 사용해 보셨습니까? – H77

답변

0

포 그라운드에서 메시지를 보내어 백그라운드 미디어 플레이어를 제어 할 수 있습니다. 당신의 백그라운드 작업에서

BackgroundMediaPlayer.SendMessageToBackground(new ValueSet 
{ 
    {"playnew", "some value"} 
}); 

: 전경 앱에서 예를 들어,이

를 들어

public sealed class AudioPlayer : IBackgroundTask 
{ 
    public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground; 
     ... 
     ... 
    } 

    private async void BackgroundMediaPlayer_MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e) 
    { 
     object value; 
     if (e.Data.TryGetValue("playnew", out value) && value != null) 
     { 
      // value will be whatever you pass from the foreground. 
      BackgroundMediaPlayer.Current.Pause(); 
      BackgroundMediaPlayer.Current.Source = stream source; 
      BackgroundMediaPlayer.Current.Play(); 
     } 
    } 

    ... 
} 

"playnew"응용 프로그램에서 전역 상수가 될 수 있습니다. ValueSet을 사용하여 백그라운드 작업에 라이브 스트림 url을 값으로 전달할 수 있습니다.