Метод IAudioSessionControl::RegisterAudioSessionNotification (audiopolicy.h)
Метод RegisterAudioSessionNotification регистрирует клиент для получения уведомлений о событиях сеанса, включая изменения в состоянии потока.
Синтаксис
HRESULT RegisterAudioSessionNotification(
[in] IAudioSessionEvents *NewNotifications
);
Параметры
[in] NewNotifications
Указатель на интерфейс IAudioSessionEvents, реализованный клиентом. Если метод завершается успешно, он вызывает метод AddRef в интерфейсе IAudioSessionEvents клиента.
Возвращаемое значение
Если метод завершается успешно, возвращает значение S_OK. В случае сбоя возможные коды возврата включают, но не ограничиваются ими, значения, показанные в следующей таблице.
Код возврата | Описание |
---|---|
|
Параметр NewNotifications имеет значение NULL. |
|
Устройство конечной точки звука было отключено, или звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены или иным образом стали недоступными для использования. |
|
Аудиослужба Windows не запущена. |
Комментарии
Этот метод передает реализованный клиентом интерфейс IAudioSessionEvents в диспетчер сеансов . После успешного вызова этого метода диспетчер сеансов вызывает методы в интерфейсе IAudioSessionEvents для уведомления клиента о различных событиях сеанса. С помощью этих методов клиент получает уведомления о следующих событиях, связанных с сеансом:
- Изменение отображаемого имени
- Изменения уровня тома
- Изменение состояния сеанса (неактивное на активное или активное на неактивное)
- Изменение параметров группировки
- Отключение клиента от сеанса (вызванное удалением пользователем устройства конечной точки аудио, завершением работы диспетчера сеансов или изменением формата потока).
Прежде чем клиент выпускает окончательную ссылку на интерфейс IAudioSessionEvents , он должен вызвать UnregisterAudioSessionNotification , чтобы отменить регистрацию интерфейса. В противном случае приложение утечет ресурсов, хранящиеся объектами IAudioSessionEvents и IAudioSessionControl . Обратите внимание, что RegisterAudioSessionNotification вызывает метод IAudioSessionEvents::AddRef клиента, а UnregisterAudioSessionNotification вызывает метод IAudioSessionEvents::Release . Если клиент допустит ошибку путем освобождения ссылки на интерфейс IAudioSessionEvents перед вызовом UnregisterAudioSessionNotification, диспетчер сеансов никогда не освобождает ссылку на интерфейс IAudioSessionEvents . Например, плохо спроектированная реализация IAudioSessionEvents может вызвать UnregisterAudioSessionNotification из деструктора для объекта IAudioSessionEvents . В этом случае клиент не будет вызывать UnregisterAudioSessionNotification , пока диспетчер сеансов не отпустит ссылку на интерфейс IAudioSessionEvents , а диспетчер сеансов не разблокирует свою ссылку на интерфейс IAudioSessionEvents, пока клиент не вызовет UnregisterAudioSessionNotification. Дополнительные сведения о методах AddRef и Release см. в разделе Обсуждение интерфейса IUnknown в документации по Windows SDK.
Кроме того, клиент должен вызвать UnregisterAudioSessionNotification , прежде чем освобождать все свои ссылки на объекты IAudioSessionControl и IAudioSessionManager . Если клиент не сохраняет ссылку по крайней мере на один из этих двух объектов, диспетчер сеансов утечет хранилище, выделенное для хранения регистрационных данных. После регистрации интерфейса уведомлений клиент продолжает получать уведомления только до тех пор, пока существует хотя бы один из этих двух объектов.
Пример кода, который вызывает метод RegisterAudioSessionNotification , см. в разделе Звуковые события для устаревших звуковых приложений.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | audiopolicy.h |
См. также раздел
Интерфейс IAudioSessionControl