在iOS4中检测通话状态

我想知道是否有可能检测用户是否正在从当前处于后台的应用程序调用。

或者,如果通话是从我的应用程序启动的,则在通话结束时收到通知。

或者,甚至更多 – 是否有可能检测到哪个应用程序在前台?
我不相信这是可能的,但我不得不尝试… 😉

任何信息将不胜感激。

谢谢。

CTCallCenter ,有一个方法callEventHandler ,你可以传递一个在呼叫事件发生时被调用的块。 在这个块中,你将传递一个CTCall对象,并且可以获得callState 。 因此,您可以在发起或结束通话时收到通知,并进行适当的处​​理。 您无法获得哪个应用程序发起呼叫,但是如果您在拨打电话时设置了一个ivar,则可以告诉您是您的应用程序发起呼叫。

例如:

 CTCallCenter *callCenter = [[CTCallCenter alloc] init]; callCenter.callEventHandler=^(CTCall* call){ if (call.callState == CTCallStateDisconnected) { //handle disconnect } }; 

编辑:重新读你的问题,你想这些事件,而你被暂停,正确的? 我不认为这是可能的。

从文档 :

如果您的应用程序在呼叫事件发生时处于活动状态,则系统会立即将事件分派给您的处理程序。 但是,通话事件也可能在您的应用程序被暂停时发生。 它被暂停时,您的应用程序不会收到通话事件。 当您的应用程序恢复活动状态时,无论您的应用程序暂停时遇到多less次状态更改,每次调用状态都会发生一次调用事件。 在您的应用程序返回到活动状态时,发送到您的处理程序的单个调用事件描述了当时的调用状态。

如果您的应用程序正在后台运行,并且AVAudioSession正在运行,您将在AVAudioSessionDelegate上收到callback,告诉您在收到电话时AVAudioSession已被中断。 AFAIK,这是你所得到的所有信息。