Это код для доступа к расширенному сеансу выполнения
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
я не могу изменить его напрямую, потому что он доступен только для чтения, и это значение определяется системой.Поэтому единственное, что я могу сделать, - это бесконечно воспроизводить звук.