【问题标题】:How to change or disable AudioSessionInterruptionListener如何更改或禁用 AudioSessionInterruptionListener
【发布时间】:2013-03-13 16:35:52
【问题描述】:

我需要在 AudioSession 初始化后更改或禁用 AudioSessionInterruptionListener。

原因如下:在某些用例中,我的应用程序必须在后台运行并进行录音,因此设置了音频背景模式 - 这很有效。当发生呼叫或其他中断时,我必须通知其他一些对象干净地停止录制 - 这很有效。然后,当应用程序使用 AudioSession 完成时,我调用 AudioSessionSetActive(false); - 这有效(如果应用程序在会话处于活动状态时被发送到后台,我会在顶部看到红色条,如果会话处于非活动状态,则红色条会没有出现。虽然,我猜,从技术上讲,该应用程序仍处于“活动”后台模式)。

但是!如果我完成了录制,并且应用程序已经发送到后台并且音频会话已经被停用,如果有来电,或者如果 Siri 被激活,那么我的应用程序仍然会收到 AudioSessionInterruptionListener 回调。是的,我可以添加代码来测试我的应用程序当前是否应该响应中断。但是,我认为这是一个错误。如果我停用了 AudioSession,则应该停止调用中断,实际上应该停止调用所有音频会话/属性侦听器。

如何更改或禁用 AudioSessionInterruptionListener?或者换一种方式来问这个问题,我怎样才能防止我的应用在不需要时“使用”后台模式?

其他信息

好吧,似乎在 iOS 6 中现在有用于 AudioSession 中断的 NSNotifications:AVAudioSessionDidBeginInterruptionNotificationAVAudioSessionDidEndInterruptionNotification。但是,我支持 iOS 5.1 及更高版本,所以这无济于事。我发现新通知的同一个文档说,Obj-C 接口 AVAudioSession 的委托属性已被贬低(在 IOS 6 中),所以我可能不应该使用它来设置/更改委托(并获取 Obj -C 中断回调)。

我想一个可能的解决方法是测试 iOS 版本并在

【问题讨论】:

  • 这太痛苦了。我现在正在处理它,因为我使用的是 C API,所以我感到更加痛苦。

标签: iphone cocoa-touch core-audio interrupt audiosession


【解决方案1】:

您是否尝试过调用 AudioSessionInitialize 并将 NULL 传递给 AudioSessionInterruptionListener(即处理中断的函数)?

界面如下:

   OSStatus AudioSessionInitialize (
       CFRunLoopRef                      inRunLoop,
       CFStringRef                       inRunLoopMode,
       AudioSessionInterruptionListener  inInterruptionListener,
       void                              *inClientData
);

文档明确表示:

在进行任何其他音频会话服务调用之前,您的应用程序必须调用此函数。您可以根据需要激活和停用音频会话(请参阅 AudioSessionSetActive),但应该只初始化一次。

【讨论】:

  • 我很肯定我尝试调用 AudioSessionInitialize 一次以激活它(填充了 Listener 参数),然后当我想停止收听时,我再次使用 Listener 参数调用它 - 它没有做杰克。那是令人沮丧的部分——我无法停止调用监听器。我仍然必须调用 AVAudioSession setDelegate:nil (在 6 中已贬值)来停止中断和 setDelegate:self 再次打开中断。既然我的最后一个测试人员正在从 iOS 5 迁移,我将再次重温这段代码。
  • 有趣的问题。似乎应该有一个用于取消初始化会话和中断侦听器的 C 样式接口函数。
猜你喜欢
  • 2013-06-04
  • 2013-06-07
  • 2017-01-12
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 2015-11-29
  • 2015-05-02
相关资源
最近更新 更多