IAudioSessionControl::RegisterAudioSessionNotification 方法 (audiopolicy.h)

RegisterAudioSessionNotification 方法注册客户端以接收会话事件的通知,包括流状态的更改。

语法

HRESULT RegisterAudioSessionNotification(
  [in] IAudioSessionEvents *NewNotifications
);

参数

[in] NewNotifications

指向客户端实现的 IAudioSessionEvents 接口的 指针。 如果方法成功,它会在客户端的 IAudioSessionEvents 接口上调用 AddRef 方法。

返回值

如果该方法成功,则它会返回 S_OK。 如果失败,可能的返回代码包括但不限于下表中显示的值。

返回代码 说明
E_POINTER
参数 NewNotificationsNULL
AUDCLNT_E_DEVICE_INVALIDATED
音频终结点设备已拔出,或者音频硬件或关联的硬件资源已重新配置、禁用、删除或以其他方式不可用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音频服务未运行。

注解

此方法将客户端实现的 IAudioSessionEvents 接口传递给会话管理器。 成功调用此方法后,会话管理器调用 IAudioSessionEvents 接口中的方法,以通知客户端各种会话事件。 通过这些方法,客户端接收以下会话相关事件的通知:

  • 显示名称更改
  • 卷级别更改
  • 会话状态 (非活动状态更改为活动状态,或从活动状态更改为非活动)
  • 分组参数更改
  • 客户端与会话断开连接 (用户删除音频终结点设备、关闭会话管理器或更改流格式)
当不再需要通知时,客户端可以调用 IAudioSessionControl::UnregisterAudioSessionNotification 方法来终止通知。

在客户端发布对 IAudioSessionEvents 接口的最终引用之前,它应调用 UnregisterAudioSessionNotification 来注销接口。 否则,应用程序会泄漏 IAudioSessionEventsIAudioSessionControl 对象持有的资源。 请注意, RegisterAudioSessionNotification 调用客户端的 IAudioSessionEvents::AddRef 方法, 而 UnregisterAudioSessionNotification 调用 IAudioSessionEvents::Release 方法。 如果客户端在调用 UnregisterAudioSessionNotification 之前释放对 IAudioSessionEvents 接口的引用,则会话管理器永远不会释放其对 IAudioSessionEvents 接口的引用。 例如,设计不佳的 IAudioSessionEvents 实现可能会从 IAudioSessionEvents 对象的析构函数调用 UnregisterAudioSessionNotification 在这种情况下,在会话管理器释放对 IAudioSessionEvents 接口的引用之前,客户端不会调用 UnregisterAudioSessionNotification,会话管理器在客户端调用 UnregisterAudioSessionNotification 之前不会释放其对 IAudioSessionEvents 接口的引用。 有关 AddRefRelease 方法的详细信息,请参阅 Windows SDK 文档中有关 IUnknown 接口的讨论。

此外,在释放对 IAudioSessionControl 和 IAudioSessionManager 对象的所有引用之前,客户端应调用 UnregisterAudioSessionNotification 除非客户端保留对这两个对象中的至少一个的引用,否则会话管理器会泄漏它分配用于保存注册信息的存储。 注册通知接口后,只要这两个对象中至少有一个存在,客户端才会继续接收通知。

有关调用 RegisterAudioSessionNotification 方法的代码示例,请参阅 旧版音频应用程序的音频事件

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 audiopolicy.h

另请参阅

IAudioSessionControl 接口

IAudioSessionControl::UnregisterAudioSessionNotification

IAudioSessionEvents 接口

IAudioSessionManager