Проигрыватель мультимедиа не начинает воспроизведение в фоновом режиме, когда приложение имеет доступ к расширенному сеансу выполнения - PullRequest
0 голосов
/ 24 июня 2018

Это код для доступа к расширенному сеансу выполнения

public static async Task<bool> BeginExtendedExecution()
    {
        // Create new session.
        var newSession = new ExtendedExecutionSession()
        {
            Reason = ExtendedExecutionReason.Unspecified,
            Description = "Timer and notifications",
        };
        newSession.Revoked += SessionRevoked;

        // Try to request access to extended session.
        switch (await newSession.RequestExtensionAsync())
        {
            case ExtendedExecutionResult.Allowed:
                session = newSession;
                return true;
            default:
            case ExtendedExecutionResult.Denied:
                newSession.Revoked -= SessionRevoked;
                newSession.Dispose();
                return false;
        }
    }

Это код, который не работает должным образом в фоновом режиме:

private async void DigitTimer_CountDownEnded(object sender, EventArgs e)
    {
        var stream = await Exercises.SynthesizeExercise(settingsButton.SelectedExercise);
        mediaPlayerElement.MediaPlayer.Source = MediaSource.CreateFromStream(stream, stream.ContentType);
        Debug.WriteLine("here");
        mediaPlayerElement.MediaPlayer.Play();
    }

Я получаю вывод «здесь»но медиаплеер не начинает играть.Когда приложение покидает фон, медиаплеер воспроизводит звук, как будто он был включен все время.И когда я снова отправляю приложение в фоновый режим, звук воспроизводится нормально.

У меня есть возможность фонового воспроизведения мультимедиа в файле манифеста.

Редактировать: я нашелиз-за того, что MediaPlayer не может начать воспроизведение, потому что mediaPlayerElement.MediaPlayer.AudioStateMonitor.SoundLevel == SoundLevel.Muted я не могу изменить его напрямую, потому что он доступен только для чтения, и это значение определяется системой.Поэтому единственное, что я могу сделать, - это бесконечно воспроизводить звук.

1 Ответ

0 голосов
/ 25 июня 2018

Хорошо, я наконец нашел решение.Вам необходимо указать значение источника MediaPlayer, отличное от нуля, прежде чем перейти в фоновый режим, или система отключит звук в MediaPlayer.

private async void Page_Loaded(object sender, RoutedEventArgs e)
    {
        var stream1 = await new SpeechSynthesizer().SynthesizeTextToStreamAsync("");
        player.Source = MediaSource.CreateFromStream(stream1, stream1.ContentType);
        player.MediaPlayer.Play();

        await BeginExtendedExecution();

        await Task.Delay(3000);

        var stream2 = await new SpeechSynthesizer().SynthesizeTextToStreamAsync("Test.");
        player.Source = MediaSource.CreateFromStream(stream2, stream2.ContentType);
        player.MediaPlayer.Play();
        Debug.WriteLine(player.MediaPlayer.AudioStateMonitor.SoundLevel);
    }

Вы можете проверить это самостоятельно.Попробуйте этот код и сверните приложение сразу после открытия (звук не должен работать):

private async void Page_Loaded(object sender, RoutedEventArgs e)
    {
        await BeginExtendedExecution();

        await Task.Delay(3000);

        var stream2 = await new SpeechSynthesizer().SynthesizeTextToStreamAsync("Test.");
        player.Source = MediaSource.CreateFromStream(stream2, stream2.ContentType);
        player.MediaPlayer.Play();
        Debug.WriteLine(player.MediaPlayer.AudioStateMonitor.SoundLevel);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...