【问题标题】:Do not allow other apps play music不允许其他应用播放音乐
【发布时间】:2023-03-24 22:36:01
【问题描述】:

我们正在开发一个 VOIP 应用程序,当有通话时,我们不希望其他应用程序播放音乐或其他东西(例如 Whatsapp)。
请问有什么方法可以正常操作吗?

编辑 1:
我认为我们需要从监听观察者开始 AVAudioSessionInterruptionNotification


接受的答案编辑 2:
当声音中断开始时,再次尝试只激活 AudioSession。这行得通。谢谢KudoCC

【问题讨论】:

  • “活动呼叫”是指系统电话呼叫吗?还是您应用的 VOIP 通话?为什么你认为观察 AVAudioSessionInterruptionNotification 会起作用?
  • 这是 VOIP 通话(也使用 CallKit,iOS 10 功能向系统报告)。如果我们观察到该通知,我们可以再次激活 AudioSession 并控制电话音频输出。但是我试过了,还是不行。
  • 您的应用是否使用AVAudioSessionCategoryPlayAndRecord 类别?您可以在播放/录制音频时尝试重新激活音频会话,如果您成功激活音频会话,其他应用将停止播放。
  • 是的,我们使用该类别,实际上您的建议是公认的答案。它有效,谢谢。我尝试了将类别再次设置为 AVAudioSessionCategoryPlayAndRecord 然后激活会话的方式,但它昨天没有工作(它无法激活会话,因此无法停止其他应用程序音乐)。只有激活会话有效:) 谢谢。
  • 你介意我写下我的答案吗?

标签: ios objective-c avaudiosession


【解决方案1】:

这是一个关于audio category的链接,里面有一个表格:

由于您的应用支持 VoIP,因此它需要播放和录制音频,并且您需要中断不可混合应用的音频,因此 AVAudioSessionCategoryPlayAndRecord 是正确的类别。此外,您应该在播放/录制音频时重新激活您的音频会话,以便类别生效。

【讨论】:

  • 谢谢,在中断开始时重新激活 AudioSession。
【解决方案2】:

在您的应用中尝试此代码以在通话时暂停背景音频,

[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];

在其他应用使用 AVAudioPlayer 时很有帮助。

更多详情请参考this Link

【讨论】:

  • 感谢您的帮助,但您的建议是关于恢复与我的问题无关的其他应用音乐。
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 2013-09-18
  • 2019-06-19
相关资源
最近更新 更多