UWP背景音频可在PC上运行,但不适用于移动设备

时间:2016-04-04 06:48:12

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

您好我正在构建一个UWP无线电应用程序,用户可以选择不同的电台和播客。

我已经完成了我的设计,所以我已经实现了一个splitview,当用户开始播放音频时,MediaElement会出现在屏幕的底部,然后无论用户的应用页面是什么,slaview都会停留在那里导航到。

为了让我在后台播放音频

<MediaElement x:Name="BGMediaElement"
              AudioCategory="BackgroundCapableMedia"

然后我有以下代码来控制它。

systemControls = SystemMediaTransportControls.GetForCurrentView();
        systemControls.ButtonPressed += SystemControls_ButtonPressed;
        systemControls.IsEnabled = true;
        systemControls.IsPlayEnabled = true;
        systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped;
        systemControls.IsPauseEnabled = true;

private void BGMediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
    {
        switch (BGMediaElement.CurrentState)
        {
            case MediaElementState.Playing:
                systemControls.PlaybackStatus = MediaPlaybackStatus.Playing;
                //playButton.Icon = new SymbolIcon(Symbol.Stop);
                break;

            case MediaElementState.Paused:
                systemControls.PlaybackStatus = MediaPlaybackStatus.Paused;
                break;

            case MediaElementState.Stopped:
                systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped;
                //playButton.Icon = new SymbolIcon(Symbol.Play);
                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();
                //playButton.Icon = new SymbolIcon(Symbol.Pause);
                break;
            case SystemMediaTransportControlsButton.Pause:
                PauseMedia();
                //playButton.Icon = new SymbolIcon(Symbol.Play);
                break;
            default:
                break;
        }
    }

    async void PlayMedia()
    {
        await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
        {
            BGMediaElement.Play();
        });
    }

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

现在我的问题是,这在PC上完美无缺,在移动设备上进行调试时,但只要我在手机上运行应用程序而不调试它,背景音频就会停止工作。

我已经在appxmanifest中设置了后台任务音频的声明。

我查看了UWP样本的背景音频,他们实现了一个单独的BackgroundAudioTask。这只是额外的工作,而且样本有很多像播放列表这样的东西,我不需要用于收音机/播客应用程序,特别是当我的代码在PC上运行完美时,我希望splitview mediaelemant在同一个时间。

希望有人能轻松解决问题。 : - )

0 个答案:

没有答案