在iOS手机上进行GSM/CDMA通话时,是否可以通知或检测通话?iOS - 通知何时发生通话?
我有一个在后台使用音频的应用程序,我希望能够检测何时发生呼叫,以便我的应用程序可以做出相应的反应,从而不会侵入蜂窝电话。
本质上,我希望能够检测何时发生呼叫,以便如果用户在通话时进入我的应用程序,我可以禁用某些功能。
所以我想知道如何检测到手机正在发生蜂窝通话?
在iOS手机上进行GSM/CDMA通话时,是否可以通知或检测通话?iOS - 通知何时发生通话?
我有一个在后台使用音频的应用程序,我希望能够检测何时发生呼叫,以便我的应用程序可以做出相应的反应,从而不会侵入蜂窝电话。
本质上,我希望能够检测何时发生呼叫,以便如果用户在通话时进入我的应用程序,我可以禁用某些功能。
所以我想知道如何检测到手机正在发生蜂窝通话?
从iOS 4开始,您可以使用Core Telephony框架中的CTCallCenter类来注册事件处理程序,以便在通话开始或结束时通知您的应用程序。它给你的CTCall有一个callState
属性,它可以是CTCallStateDialing
,CTCallStateIncoming
,CTCallStateConnected
,或者当它结束时 - CTCallStateDisconnected
。
谢谢,我已经实施了,但它只有在用户使用我的应用程序时才会有效,然后我收到来电,如果我的应用程序未使用,用户拨打电话,然后在通话期间转到我的应用程序,我想在该阶段禁用某些选项。 –
你可以使用CoreTelephony框架。但是你必须使用一些私人API。并且我有一些演示代码。 https://github.com/edison0951/AppNotifyBySMSDemo。而最终的解决方案是MAP.this是作为iOS 6中的SMS notifications in iOS6
,你应该是相同的:
[[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)
}
}
有没有办法获得来电的电话号码? – Mark
不工作,我是否需要更新plist?像注册一个后台进程.... – shebelaw
不知道这是否有助于任何人,但我只是不想动画一个UIView,如果一个调用发生,并且这个检查工作完美:if(callCenter.currentCalls == nil)。 .... callCenter是CTCallCenter的一个实例。 –