2016-05-09 5 views
1

Я работаю над своим проектом (клиентом soundcloud), и приложение может воспроизводить треки просто отлично, но не тогда, когда приложение сведено к минимуму. Я использую MediaElement-Object для воспроизведения mp3 с URL-адреса. Как заставить музыку продолжать воспроизведение музыки, когда приложение находится в фоновом режиме. Или самый простой способ/лучший объяснимый учебник для реализации этого. Я искал много за хороший ответ, но те, которые я нашел, были слишком хороши для меня: D Что означает, что я этого не понял.Что является самым простым способом воспроизведения аудио в фоновом режиме в UWP?

ответ

4

Чтобы воспроизвести звук в фоновом режиме, вам необходимо будет сделать Декларацию в Package.appxmanifest для фоновых задач, включить звук и добавить точку входа, такую ​​как TestUWP.MainPage.

enter image description here

Кроме того, для пользователя, чтобы иметь возможность легко управлять аудио вы можете использовать SystemMediaTransportControls

Вот основные настройки с Play и Pause.

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

Редактирование: проблема решена, поскольку я установил AudioCategory-Свойство MediaElement в BackgroundCapableMedia. Спасибо за ваш ответ, вы спасли меня много работы! – Flauschcoder

+1

Редактировать 2: Он работает на ПК, но не для мобильного: / – Flauschcoder

 Смежные вопросы

  • Нет связанных вопросов^_^