【问题标题】: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 什么意思,我不明白。

【问题讨论】:

    标签: c# windows win-universal-app background-audio


    【解决方案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 时,问题已解决。感谢您的回答,您为我节省了很多工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多