iOS后台状态监听调用状态

iOS monitoring call state in background state

我的应用程序一直在录音,当检测到 phone 来电时,它应该播放声音并停止录音。在 phone 调用之后,应该继续录制。

我已经在前台使用 CTCallCenter 完成了这些任务。

但是,当我的应用程序处于后台时,CTCallCenter 无法正常工作。即使将背景标志 "VoIp" 添加到我的应用程序,CTCallCenter 也会错过 CallDisconnected。这是 iOS 的错误吗?

所以我尝试了 "AVAudioSessionInterruptionNotification"。似乎它从未错过任何一个 InterruptionBegin 和 InterruptionEnd。但它不起作用,因为我需要在检测到 InterruptionBegin 后播放声音。显然,InterruptionBegin 意味着我的音频会话处于非活动状态,无法发出声音。

有什么方法可以使 CTCallCenter 在我的情况下可用吗?

我发现检查后台是否有 GSM 呼叫的唯一方法是检查 GSM 呼叫使用的音频单元的可用性。

所以

BOOL isOtherAudioPlaying=[[AVAudioSession sharedInstance] isOtherAudioPlaying];

会告诉您是否有正在进行的 GSM 通话。我不太确定它是否对使用音频单元的其他应用程序有副作用。我已经尝试使用相机和语音备忘录,它们似乎已暂停,因此不会影响您的应用程序。