iOS电话状态监听

一、iOS10之前

  1. 导入头文件
1
2
#import <CoreTelephony/CTCallCenter.h> 
#import <CoreTelephony/CTCall.h>
  1. 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@property (strong, nonatomic) CTCallCenter *callCenter;

self.callCenter = [[CTCallCenter alloc] init];
self.callCenter.callEventHandler = ^(CTCall * call) {
if([call.callState isEqualToString:CTCallStateDisconnected]) {
NSLog(@"Call has been disconnected"); // 电话被挂断
} else if([call.callState isEqualToString:CTCallStateConnected] {
NSLog(@"Call has been connected"); // 电话被接听
} else if([call.callState isEqualToString:CTCallStateIncoming]) {
NSLog(@"Call is incoming"); // 来电话了
} else if([call.callState isEqualToString:CTCallStateDialing]) {
NSLog(@"Call is Dialing"); // 拨号
} else {
NSLog(@"Nothing is done");
}
};

二、iOS10之后

iOS10及之后使用Callkit中的CXCallObserver和CXCall

  1. 导入头文件
1
2
#import <CallKit/CXCallObserver.h> 
#import <CallKit/CXCall.h>
  1. 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@property (strong, nonatomic) CXCallObserver *callObserver;
// 电话监听
if (!self.callObserver) {
self.callObserver = [[CXCallObserver alloc] init];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
}
#pragma mark - 电话的监听

- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
NSLog(@"call observer uuid: %@", call.UUID);
NSLog(@"outgoing(拨打) :%d onHold(待接通) :%d hasConnected(接通) :%d hasEnded(挂断) :%d",call.outgoing,call.onHold,call.hasConnected,call.hasEnded);
/* 挂断 outgoing(拨打) :0 onHold(待接通) :0 hasConnected(接通) :0 hasEnded(挂断) :1
拨打 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(拨打) :0 onHold(待接通) :0 hasConnected(接通) :1 hasEnded(挂断) :0 (接通)
outgoing(拨打) :0 onHold(待接通) :0 hasConnected(接通) :1 hasEnded(挂断) :1 (接通 - 挂断)*/
if (call.hasConnected) {
/// 接通了电话
}

if (call.hasEnded) {
// 挂断
}
}
------ 本文结束------
0%