2011-09-23 55 views
4

在iOS手机上进行GSM/CDMA通话时,是否可以通知或检测通话?iOS - 通知何时发生通话?

我有一个在后台使用音频的应用程序,我希望能够检测何时发生呼叫,以便我的应用程序可以做出相应的反应,从而不会侵入蜂窝电话。

本质上,我希望能够检测何时发生呼叫,以便如果用户在通话时进入我的应用程序,我可以禁用某些功能。

所以我想知道如何检测到手机正在发生蜂窝通话?

回答

9

从iOS 4开始,您可以使用Core Telephony框架中的CTCallCenter类来注册事件处理程序,以便在通话开始或结束时通知您的应用程序。它给你的CTCall有一个callState属性,它可以是CTCallStateDialing,CTCallStateIncoming,CTCallStateConnected,或者当它结束时 - CTCallStateDisconnected

+0

有没有办法获得来电的电话号码? – Mark

+0

不工作,我是否需要更新plist?像注册一个后台进程.... – shebelaw

+0

不知道这是否有助于任何人,但我只是不想动画一个UIView,如果一个调用发生,并且这个检查工作完美:if(callCenter.currentCalls == nil)。 .... callCenter是CTCallCenter的一个实例。 –

1
+0

谢谢,我已经实施了,但它只有在用户使用我的应用程序时才会有效,然后我收到来电,如果我的应用程序未使用,用户拨打电话,然后在通话期间转到我的应用程序,我想在该阶段禁用某些选项。 –

1

,你应该是相同的:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onAudioInterruption:) name:AVAudioSessionInterruptionNotification object:session 

然后:

- (void)onAudioInterruption:(NSNotification*)notification 
{ 
    NSDictionary *info = notification.userInfo; 
    NSUInteger type = [[info valueForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue]; 

    if (type == AVAudioSessionInterruptionTypeBegan) { 
     // stop audio (or whatever) 
    } else if (type == AVAudioSessionInterruptionTypeEnded) { 
     // restart audio (or whatever) 
    } 
}