2016-05-09 133 views
1

我正在研究我的Project(一個soundcloud客戶端),並且該應用可以播放曲目很好,但不會在應用程序最小化時播放。我使用MediaElement-Object從網址播放mp3。如何在應用程序處於後臺時強制音樂繼續播放音樂。或者最簡單的方法/最好的解釋教程來實現這一點。我尋找了很好的答案,但是我發現,這些答案對我來說太過分了:D這意味着什麼,我不明白。在UWP中播放背景音頻最簡單的方法是什麼?

回答

4

要在後臺播放音頻,您必須在Package.appxmanifest中爲後臺任務執行聲明,啓用音頻並添加入口點,如TestUWP.MainPage頁面。

enter image description here

還能夠爲用戶輕鬆能夠管理音頻您可以使用SystemMediaTransportControls

這裏是一個遊戲的基本設置和暫停。

XAML

<MediaElement x:Name="mediaElement" Height="100" Width="100" AreTransportControlsEnabled="True"/> 

C#

public MainPage() 
{ 
    this.InitializeComponent(); 

    systemControls = SystemMediaTransportControls.GetForCurrentView(); 

    // Register to handle the following system transpot control buttons. 
    systemControls.ButtonPressed += SystemControls_ButtonPressed; 

    mediaElement.CurrentStateChanged += MediaElement_CurrentStateChanged; 


    systemControls.IsPlayEnabled = true; 
    systemControls.IsPauseEnabled = true; 
} 

private void MediaElement_CurrentStateChanged(object sender, RoutedEventArgs e) 
{ 
    switch (mediaElement.CurrentState) 
    { 
     case MediaElementState.Playing: 
      systemControls.PlaybackStatus = MediaPlaybackStatus.Playing; 
      break; 
     case MediaElementState.Paused: 
      systemControls.PlaybackStatus = MediaPlaybackStatus.Paused; 
      break; 
     case MediaElementState.Stopped: 
      systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped; 
      break; 
     case MediaElementState.Closed: 
      systemControls.PlaybackStatus = MediaPlaybackStatus.Closed; 
      break; 
     default: 
      break; 
    } 
} 



void SystemControls_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args) 
{ 
    switch (args.Button) 
    { 
     case SystemMediaTransportControlsButton.Play: 
      PlayMedia(); 
      break; 
     case SystemMediaTransportControlsButton.Pause: 
      PauseMedia(); 
      break; 
     case SystemMediaTransportControlsButton.Stop: 
      StopMedia(); 
      break; 
     default: 
      break; 
    } 
} 

private async void StopMedia() 
{ 
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
    { 
     mediaElement.Stop(); 
    }); 
} 

async void PlayMedia() 
{ 
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
    { 
     if (mediaElement.CurrentState == MediaElementState.Playing) 
      mediaElement.Pause(); 
     else 
      mediaElement.Play(); 
    }); 
} 

async void PauseMedia() 
{ 
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
    { 
     mediaElement.Pause(); 
    }); 
} 

輸出

Output

如果你想使更多的控制,你可以使用可用的屬性爲前做的。

systemControls.IsNextEnabled = true;

,你必須添加case的按鈕開關。

case SystemMediaTransportControlsButton.Next: 
        //handle next song 
        break; 
+0

謝謝,但結果保持不變 - 當我最小化窗口,你不能聽到音頻了。 – Flauschcoder

+1

編輯:問題解決了,因爲我將MediaElement的AudioCategory-Property設置爲BackgroundCapableMedia。感謝您的回答,您爲我節省了大量工作! – Flauschcoder

+1

編輯2:它適用於PC,但不適用於手機:/ – Flauschcoder

相關問題