Как проще всего воспроизводить звук в фоновом режиме в UWP?

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


person Flauschcoder    schedule 09.05.2016    source источник


Ответы (1)


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

введите описание изображения здесь

Также, чтобы пользователь мог легко управлять звуком, вы можете использовать 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();
    });
}

Выход

Выход

Если вы хотите включить больше элементов управления, вы можете сделать это, используя доступные свойства, например.

systemControls.IsNextEnabled = true;

и вы должны добавить case в кнопочный переключатель.

case SystemMediaTransportControlsButton.Next:
                    //handle next song
                    break;
person Stamos    schedule 09.05.2016
comment
спасибо, но результат остается прежним - когда я сворачиваю окно, вы больше не слышите звук. - person Flauschcoder; 10.05.2016
comment
Редактировать: проблема решена, поскольку я установил AudioCategory-Property MediaElement в BackgroundCapableMedia. Спасибо за ваш ответ, вы сэкономили мне много работы! - person Flauschcoder; 10.05.2016