IAudioSessionControl::RegisterAudioSessionNotification 方法 (audiopolicy.h)
RegisterAudioSessionNotification 方法注册客户端以接收会话事件的通知,包括流状态的更改。
语法
HRESULT RegisterAudioSessionNotification(
[in] IAudioSessionEvents *NewNotifications
);
参数
[in] NewNotifications
指向客户端实现的 IAudioSessionEvents 接口的 指针。 如果方法成功,它会在客户端的 IAudioSessionEvents 接口上调用 AddRef 方法。
返回值
如果该方法成功,则它会返回 S_OK。 如果失败,可能的返回代码包括但不限于下表中显示的值。
返回代码 | 说明 |
---|---|
|
参数 NewNotifications 为 NULL。 |
|
音频终结点设备已拔出,或者音频硬件或关联的硬件资源已重新配置、禁用、删除或以其他方式不可用。 |
|
Windows 音频服务未运行。 |
注解
此方法将客户端实现的 IAudioSessionEvents 接口传递给会话管理器。 成功调用此方法后,会话管理器调用 IAudioSessionEvents 接口中的方法,以通知客户端各种会话事件。 通过这些方法,客户端接收以下会话相关事件的通知:
- 显示名称更改
- 卷级别更改
- 会话状态 (非活动状态更改为活动状态,或从活动状态更改为非活动)
- 分组参数更改
- 客户端与会话断开连接 (用户删除音频终结点设备、关闭会话管理器或更改流格式)
在客户端发布对 IAudioSessionEvents 接口的最终引用之前,它应调用 UnregisterAudioSessionNotification 来注销接口。 否则,应用程序会泄漏 IAudioSessionEvents 和 IAudioSessionControl 对象持有的资源。 请注意, RegisterAudioSessionNotification 调用客户端的 IAudioSessionEvents::AddRef 方法, 而 UnregisterAudioSessionNotification 调用 IAudioSessionEvents::Release 方法。 如果客户端在调用 UnregisterAudioSessionNotification 之前释放对 IAudioSessionEvents 接口的引用,则会话管理器永远不会释放其对 IAudioSessionEvents 接口的引用。 例如,设计不佳的 IAudioSessionEvents 实现可能会从 IAudioSessionEvents 对象的析构函数调用 UnregisterAudioSessionNotification。 在这种情况下,在会话管理器释放对 IAudioSessionEvents 接口的引用之前,客户端不会调用 UnregisterAudioSessionNotification,会话管理器在客户端调用 UnregisterAudioSessionNotification 之前不会释放其对 IAudioSessionEvents 接口的引用。 有关 AddRef 和 Release 方法的详细信息,请参阅 Windows SDK 文档中有关 IUnknown 接口的讨论。
此外,在释放对 IAudioSessionControl 和 IAudioSessionManager 对象的所有引用之前,客户端应调用 UnregisterAudioSessionNotification。 除非客户端保留对这两个对象中的至少一个的引用,否则会话管理器会泄漏它分配用于保存注册信息的存储。 注册通知接口后,只要这两个对象中至少有一个存在,客户端才会继续接收通知。
有关调用 RegisterAudioSessionNotification 方法的代码示例,请参阅 旧版音频应用程序的音频事件。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2008 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | audiopolicy.h |