Detecting phone call interruption in iOS App
One of the default behaviors of iOS is that it stops all the services & functions of the app while you are on a phone call.
While writing an audio-video iOS App, we must handle phone call’s interruption properly to resume the app. It is possible to detect a phone call and it’s states with the help of Core Telephony framework. Following steps will guide you to handle phone calls in your iPhones properly.
Steps to follow :
Add CoreTelephony Framework.
Import the following classes of CoreTelephony into your class wherever you need to handle or detect phone call’s interruption.
#import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h>
Make an object of CTCallCenter into your handler class.
@property (nonatomic, strong) CTCallCenter *objCallCenter;
Add a notification observer for call state changed inside your handler class viewDidLoad method.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(CallStateDidChange:) name:@"CTCallStateDidChange" object:nil];
Write a call event handler for the call center in viewDidLoad
self.objCallCenter = [[CTCallCenter alloc] init]; self.objCallCenter.callEventHandler = ^(CTCall* call) { // anounce that we've had a state change in our call center NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:nil userInfo:dict]; };
Write call state changed selector
- (void)CallStateDidChange:(NSNotification *)notification { NSLog(@"Notification : %@", notification); NSString *callInfo = [[notification userInfo] objectForKey:@"callState"]; if([callInfo isEqualToString: CTCallStateDialing]) { //The call state, before connection is established, when the user initiates the call. NSLog(@"Call is dailing"); } if([callInfo isEqualToString: CTCallStateIncoming]) { //The call state, before connection is established, when a call is incoming but not yet answered by the user. NSLog(@"Call is Coming"); } if([callInfo isEqualToString: CTCallStateConnected]) { //The call state when the call is fully established for all parties involved. NSLog(@"Call Connected"); } if([callInfo isEqualToString: CTCallStateDisconnected]) { //The call state Ended. NSLog(@"Call Ended"); } }
Perform the tasks according to the phone call’s state.
Hope It Helps 🙂
Is there a way to detect calls when app is in background?