一、iOS10之前
iOS10之前使用CoreTelephony中的CTCallCenter和CTCall。
1、導(dǎo)入:
#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>
2、使用:
self.callCenter = [CTCallCenter new];
__weak ViewController *weakSelf = self;
self.callCenter.callEventHandler = ^(CTCall *call) {
dispatch_async(dispatch_get_main_queue(), ^{
if ([call.callState isEqualToString:CTCallStateDialing]) {
NSLog(@"電話主動撥打電話");
} else if ([call.callState isEqualToString:CTCallStateConnected]) {
NSLog(@"電話接通");
weakSelf.startDate = [NSDate date];
} else if ([call.callState isEqualToString:CTCallStateDisconnected]) {
NSLog(@"電話掛斷");
weakSelf.endDate = [NSDate date];
[weakSelf called];
} else if ([call.callState isEqualToString:CTCallStateIncoming]) {
NSLog(@"電話被叫");
} else {
NSLog(@"電話其他狀態(tài)");
}
});
};
二、iOS10之后
iOS10及之后使用Callkit中的CXCallObserver和CXCall
1、導(dǎo)入:
#import <CallKit/CXCallObserver.h>
#import <CallKit/CXCall.h>
2、使用:
a、設(shè)置代理
self.callObserver = [CXCallObserver new];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
b、實(shí)現(xiàn)協(xié)議CXCallObserverDelegate方法
//MARK: CXCallObserverDelegate
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
NSLog(@"outgoing :%d onHold :%d hasConnected :%d hasEnded :%d",call.outgoing,call.onHold,call.hasConnected,call.hasEnded);
/*
撥打: outgoing :1 onHold :0 hasConnected :0 hasEnded :0
拒絕: outgoing :1 onHold :0 hasConnected :0 hasEnded :1
鏈接: outgoing :1 onHold :0 hasConnected :1 hasEnded :0
掛斷: outgoing :1 onHold :0 hasConnected :1 hasEnded :1
對方未接聽時掛斷: outgoing :1 onHold :0 hasConnected :0 hasEnded :1
新來電話: outgoing :0 onHold :0 hasConnected :0 hasEnded :0
保留并接聽: outgoing :1 onHold :1 hasConnected :1 hasEnded :0
另一個掛掉: outgoing :0 onHold :0 hasConnected :1 hasEnded :0
保持鏈接: outgoing :1 onHold :0 hasConnected :1 hasEnded :1
對方掛掉: outgoing :0 onHold :0 hasConnected :1 hasEnded :1
*/
}