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?
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
.
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)
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With