Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS - Notification of when a call is taking place?

Is it possible to be notified or detect when a GSM/CDMA call is taking place on an iOS handset?

I have an application that uses audio in the background and I want to be able to detect when a call is taking place so that my app can react accordingly so as not to intrude on the cellular call in anyway.

Essentially I want to be able to detect when a call is taking place so that if the user enters my application while on a call I can disable some functionality.

So I was wondering how I can detect that a cellular call is taking place on a device?

like image 313
Donal Rafferty Avatar asked Dec 17 '22 09:12

Donal Rafferty


2 Answers

As of iOS 4, you can use the CTCallCenter class in the Core Telephony framework to register an event handler so your app gets notified when a call starts or ends. The CTCall it gives you has a callState property, which can be CTCallStateDialing, CTCallStateIncoming, CTCallStateConnected, or—when it ends—CTCallStateDisconnected.

like image 80
Noah Witherspoon Avatar answered Dec 31 '22 12:12

Noah Witherspoon


As of iOS 6, you should:

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

and then:

- (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)
    }
}
like image 36
prewett Avatar answered Dec 31 '22 11:12

prewett