Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить приложение таким образом, чтобы воспроизведение медиа продолжалось при переходе приложения с переднего плана на фон. Это означает, что даже после того, как пользователь свести к минимуму приложение, вернуться на домашний экран или перейти от вашего приложения другим способом, ваше приложение может продолжать воспроизводить звук.
Ниже приведены сценарии фонового воспроизведения звука:
длительные списки воспроизведения: пользователь быстро открывает приложение на переднем плане, чтобы выбрать и запустить плейлист, ожидая, что он продолжит воспроизводиться в фоновом режиме.
Использование переключателя задач: Пользователь кратко открывает приложение переднего плана, чтобы начать воспроизведение звука, а затем переключается на другое открытое приложение с помощью переключателя задач. Пользователь ожидает, что звук будет продолжать воспроизводиться в фоновом режиме.
Фоновая реализация звука, описанная в этой статье, позволяет приложению работать универсально на всех устройствах Windows, включая Mobile, Desktop и Xbox.
Замечание
Код, приведенный в этой статье, был адаптирован из примера фонового звука UWP.
Объяснение однопроцессной модели
В Windows 10 версии 1607 появилась новая модель с одним процессом, которая значительно упрощает процесс включения фонового звука. Ранее вашему приложению требовалось управлять фоновым процессом в дополнение к приложению, работающему на переднем плане, а затем вручную отправлять изменения состояний между двумя процессами. В новой модели вы просто добавите фоновую функцию звука в манифест приложения, и приложение будет автоматически воспроизводить звук при переходе на фон. Два новых события жизненного цикла приложений, EnteredBackground и LeavingBackground сообщают приложению о входе и выходе из фонового режима. Когда ваше приложение переходит в фоновый режим или возвращается из него, ограничения по памяти, задаваемые системой, могут измениться. Поэтому вы можете использовать эти события для проверки текущего использования памяти и освобождения ресурсов, чтобы не превышать лимит.
Благодаря устранению сложного межпроцессного взаимодействия и управления состоянием новая модель позволяет реализовать фоновый звук гораздо быстрее с значительным сокращением кода. Однако двухпроцессная модель по-прежнему поддерживается в текущем выпуске для обратной совместимости. Для получения дополнительной информации см. модель фонового звука наследия .
Требования к фоновому звуку
Ваше приложение должно соответствовать следующим требованиям для воспроизведения звука, пока ваше приложение находится в фоновом режиме.
- Добавьте возможность воспроизведения фонового носителя в манифест приложения, как описано далее в этой статье.
- Если ваше приложение отключает автоматическую интеграцию MediaPlayer с Системными Средствами Управления (SMTC), например, устанавливая свойство CommandManager.IsEnabled в значение false, то необходимо выполнить ручную интеграцию с SMTC, чтобы включить воспроизведение фонового медиа. Вы также должны вручную интегрироваться с SMTC, если вы используете API, отличный от MediaPlayer, например AudioGraph, для воспроизведения звука, если вы хотите, чтобы звук продолжал воспроизводиться при переходе приложения на фон. Минимальные требования к интеграции SMTC описаны в разделе "Использование системных элементов управления транспортировкой мультимедиа для фонового звука" ручного управлениясистемных элементов управления транспортом мультимедиа.
- Хотя приложение находится в фоновом режиме, необходимо оставаться под ограничениями использования памяти, установленными системой для фоновых приложений. Руководство по управлению памятью в фоновом режиме представлено далее в этой статье.
Возможность воспроизведения фонового носителя
Чтобы включить фоновый звук, необходимо добавить функцию воспроизведения фонового аудио в файл манифеста приложения Package.appxmanifest.
Добавление возможностей в манифест приложения с помощью конструктора манифестов
- В Microsoft Visual Studio в обозревателе решений откройте конструктор манифеста приложения, дважды щелкнув элемент package.appxmanifest.
- Перейдите на вкладку "Возможности ".
- Установите флажок Фоновое воспроизведение медиа.
Чтобы задать возможность, вручную изменив XML манифеста приложения, сначала убедитесь, что префикс пространства имен uap3 определен в элементе Package . Если нет, добавьте его, как показано ниже.
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3"
IgnorableNamespaces="uap uap3 mp">
Затем добавьте функцию backgroundMediaPlayback в элемент Capabilities:
<Capabilities>
<uap3:Capability Name="backgroundMediaPlayback"/>
</Capabilities>
Обработка перехода между передним планом и фоном
Когда ваше приложение переходит из переднего плана в фон, вызывается событие EnteredBackground. И когда приложение возвращается на передний план, возникает событие LeavingBackground. Так как это события жизненного цикла приложения, необходимо зарегистрировать обработчики для этих событий при создании приложения. В шаблоне проекта по умолчанию это означает добавление его в конструктор классов App в App.xaml.cs.
public App()
{
this.InitializeComponent();
this.Suspending += OnSuspending;
this.EnteredBackground += App_EnteredBackground;
this.LeavingBackground += App_LeavingBackground;
}
Создайте переменную для отслеживания того, работаете ли вы в настоящее время в фоновом режиме.
bool _isInBackgroundMode = false;
Когда вызывается событие EnteredBackground, установите переменную отслеживания, чтобы указать, что вы в настоящее время работаете в фоновом режиме. Не следует выполнять длительные задачи в событии EnteredBackground , так как это может привести к замедлению перехода к фоновому режиму для пользователя.
private void App_EnteredBackground(object sender, EnteredBackgroundEventArgs e)
{
_isInBackgroundMode = true;
}
В обработчике событий LeavingBackground необходимо задать переменную отслеживания, чтобы указать, что ваше приложение больше не работает в фоновом режиме.
private void App_LeavingBackground(object sender, LeavingBackgroundEventArgs e)
{
_isInBackgroundMode = false;
}
Требования к управлению памятью
Наиболее важной частью обработки перехода между передним планом и фоном является управление памятью, используемой приложением. Поскольку работа в фоновом режиме уменьшает объем памяти, который разрешено удерживать вашему приложению системой, необходимо также зарегистрировать события AppMemoryUsageIncreased и AppMemoryUsageLimitChanging. При возникновении этих событий необходимо проверить текущее использование памяти вашего приложения и текущее ограничение, а затем сократить использование памяти при необходимости. Сведения о сокращении использования памяти во время работы в фоновом режиме см. в статье "Бесплатная память" при переходе приложения на фон.
Доступность сети для фоновых приложений мультимедиа
Все сетевые мультимедиа источники, которые не создаются из потока или файла, будут поддерживать активное сетевое подключение при получении удаленного содержимого и освобождать его, когда не получают его. MediaStreamSource, в частности, зависит от приложения, чтобы правильно сообщить правильный буферизованный диапазон платформе с помощью SetBufferedRange. После полного буферизации всего содержимого сеть больше не будет зарезервирована от имени приложения.
Если необходимо выполнять сетевые вызовы, которые происходят в фоновом режиме, если носитель не скачивается, они должны быть упакованы в соответствующую задачу, например MaintenanceTrigger или TimeTrigger. Дополнительные сведения см. в статье "Поддержка приложения с помощью фоновых задач".
Связанные темы
- воспроизведение мультимедиа
- Воспроизведение звука и видео с помощью MediaPlayer
- интеграция с системными элементами управления транспортировкой мультимедиа
- Пример фонового звука