Windows 8.1背景音频播放器don';无法在应用程序的其他页面中工作

本文关键字:应用程序 其他 工作 背景 音频 播放器 don Windows | 更新日期: 2023-09-27 18:19:40

我有一个应用程序,它将从互联网流式传输音频,媒体元素在主页中,它在其中运行良好,当应用程序在后台时,我在应用程序中有多个页面,当从主页导航到另一个页面时,当我返回主页时,音频停止并返回工作
有没有办法让它在应用程序的其他页面上运行??

Windows 8.1背景音频播放器don';无法在应用程序的其他页面中工作

我为windows和windows phone编写声卡。

为包含媒体元素的框架创建应用程序范围的样式。现在框架可以播放声音,并且在页面之间导航不会影响声音。

既然媒体元素在框架上,页面就需要以某种方式引用该媒体元素。我创建了一个公共类来提供帮助。然后每个页面都注册到这个类来播放声音。

页面中:

SoundPlayer.Instance.Initialize();

SoundPlayer类:

public void Initialize()
    {
        // Register media elements to the Sound Service.
        try
        {
            DependencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0);
            var foregroundPlayer = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0) as MediaElement;
            var backgroundPlayer = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 1) as MediaElement;
            SoundPlayer.ForegroundPlayer = foregroundPlayer;
            // Keep the state.
            var isMuted = this.IsBackgroundMuted;
            SoundPlayer.BackgroundPlayer = backgroundPlayer;
            this.IsBackgroundMuted = isMuted;
        }
        catch (Exception)
        {
            // Most probably you forgot to apply the custom root frame style.
            SoundPlayer.ForegroundPlayer = null;
            SoundPlayer.BackgroundPlayer = null;
        }
    }

    public async Task Play(string soundPath, bool inBackground = false)
    {
        var mediaElement = inBackground ? BackgroundPlayer : ForegroundPlayer;
        if (mediaElement == null)
        {
            return;
        }
        mediaElement.Source = new Uri(soundPath);
        await mediaElement.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
        {
            mediaElement.Stop();
            mediaElement.Play();
        });
    }

在App.xaml 中

<ResourceDictionary>
                <Style x:Key="RootFrameStyle"
                       TargetType="Frame">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="Frame">
                                <Grid>
                                    <!-- Foreground Player -->
                                    <MediaElement IsLooping="False" />
                                    <!-- Background Player -->
                                    <MediaElement IsLooping="True" />
                                    <Grid>
                                        <ContentPresenter />
                                    </Grid>
                                </Grid>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ResourceDictionary>

下面是一篇博客文章,更详细地解释了这一点。http://blogs.u2u.be/diederik/post/2014/07/10/Playing-sounds-in-a-Universal-Windows-MVVM-app.aspx