在 UWP 中在后台播放音频的最简单方法是啥?

Posted

技术标签:

【中文标题】在 UWP 中在后台播放音频的最简单方法是啥?【英文标题】:What's the easiest way to play audio in background in UWP?在 UWP 中在后台播放音频的最简单方法是什么? 【发布时间】:2016-09-04 08:48:22 【问题描述】:

我正在开发我的项目(soundcloud 客户端),该应用程序可以正常播放曲目,但在应用程序最小化时不能。我使用 MediaElement-Object 从 url 播放 mp3。当应用程序在后台时,如何强制音乐继续播放音乐。或者什么是最简单的方法/最好的解释教程来实现这个。我搜索了很多好答案,但我发现那些对我来说太好了 :D 什么意思,我不明白。

【问题讨论】:

【参考方案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();
    );

输出

如果您想启用更多控件,您可以使用 ex 的可用属性。

systemControls.IsNextEnabled = true;

你必须在按钮开关中添加case

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

【讨论】:

谢谢,但结果保持不变 - 当我最小化窗口时,您再也听不到音频了。 编辑:当我将 MediaElement 的 AudioCategory-Property 设置为 BackgroundCapableMedia 时,问题已解决。感谢您的回答,您为我节省了很多工作!

以上是关于在 UWP 中在后台播放音频的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在delphi中从数组数据中播放声音的最简单方法是啥

如何在 iOS 6 中在后台播放音频文件?

如何在 iOS 4 中在后台播放多个音频文件?

如何检测其他应用程序的音频是不是在后台播放? (UWP,Windows 10)

使用任何方法在 openTK 应用程序中播放音频的最简单方法

在 iPhone 应用程序中播放声音剪辑的最简单方法是啥?