導(dǎo)入
#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>
設(shè)置電話代理
-(void)setCallObseaver{
if (@available(iOS 10.0, *)) {
self.callObserver = [CXCallObserver new];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
} else {
// Fallback on earlier versions
}
}
回調(diào)
//MARK: CXCallObserverDelegate
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call API_AVAILABLE(ios(10.0)){
NSLog(@"outgoing :%d onHold :%d hasConnected :%d hasEnded :%d",call.outgoing,call.onHold,call.hasConnected,call.hasEnded);
NSInteger outgoing = call.outgoing;
NSInteger onHold = call.onHold;
NSInteger hasConnected = call.hasConnected;
NSInteger hasEnded = call.hasEnded;
/*
撥打: outgoing :1 onHold :0 hasConnected :0 hasEnded :0
拒絕: outgoing :0 onHold :0 hasConnected :0 hasEnded :1
鏈接: outgoing :1 onHold :0 hasConnected :1 hasEnded :0
掛斷: outgoing :1 onHold :0 hasConnected :0 hasEnded :1
對(duì)方未接聽時(shí)掛斷: outgoing :1 onHold :0 hasConnected :0 hasEnded :1
新來電話: outgoing :0 onHold :0 hasConnected :0 hasEnded :0
保留并接聽: outgoing :1 onHold :1 hasConnected :1 hasEnded :0
另一個(gè)掛掉: outgoing :0 onHold :0 hasConnected :1 hasEnded :0
保持鏈接: outgoing :1 onHold :0 hasConnected :1 hasEnded :1
對(duì)方掛掉: outgoing :0 onHold :0 hasConnected :1 hasEnded :1
*/
BOOL isOutCall = NO;
if (outgoing == 0 && hasEnded && onHold==0 && hasConnected ==0) {
DLog(@"----拒絕");
isOutCall = YES;
}else if (outgoing && onHold==0 && hasConnected == 0 && hasEnded){
DLog(@"----掛斷");
isOutCall = YES;
}else if (hasConnected && outgoing == 0 && onHold == 0 && hasEnded == 0){
DLog(@"----另一個(gè)掛掉");
isOutCall = YES;
}else if (hasConnected && outgoing == 0 && onHold == 0 && hasEnded){
DLog(@"----對(duì)方掛掉 ");
isOutCall = YES;
}
if (isOutCall) {
//操作
}
}
移除電話監(jiān)聽
if (_callObserver) {
[_callObserver setDelegate:nil queue:dispatch_get_main_queue()];
_callObserver = nil;
}