Фоновый аудиоплеер Windows 8.1 не работает на другой странице приложения

1

У меня есть приложение, которое будет транслировать аудио из Интернета, элемент мультимедиа находится на главной странице, он отлично работает в нем, и хотя приложение находится в фоновом режиме, и у меня есть более одной страницы в приложении, в то время как навигация с основного страницы на другую страницу, звук останавливается и возвращается к работе, когда я возвращаюсь на главную страницу.
Есть ли способ заставить его работать на других страницах приложения?

Теги:
audio
windows-8.1

1 ответ

0
Лучший ответ

Я пишу деки для окон и телефонов Windows.

Создайте стиль приложения для рамки, который содержит элемент мультимедиа. Теперь кадр может воспроизводить звуки, а перемещение между страницами не повлияет на звук.

Теперь, когда элемент мультимедиа находится в кадре, страница должна каким-то образом ссылаться на этот медиа-элемент. Я создаю открытый класс, чтобы помочь. Затем каждая страница регистрируется в этом классе для воспроизведения звуков.

На странице:

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

  • 0
    Я попробовал ваш образец на связанной странице. Возможно, я неправильно понял концепцию «фона», так как в моем телефоне WP8.1 ваши «фоновые» звуки немедленно прекращаются, когда я переключаю какое-то другое приложение на передний план. Это ожидается? Я скомпилировал его с VS2013 Update5

Ещё вопросы

Сообщество Overcoder
Наверх
Меню