1.0首先知道怎么去拨打电话
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
2.0 iOS10后此方法被遗弃,并且打电话的弹窗出现时有延迟,优化下
NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", content_mobile];
NSComparisonResult compare = [[UIDevice currentDevice].systemVersion compare:@"10.0"];
if (compare == NSOrderedDescending || compare == NSOrderedSame) { // 大于等于10.0系统使用此openURL方法
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]];
}
3.0 好了 现在开始监听状态,网上有不少类似的,这里十分感谢这位大神的分享,来个传送门以表敬意 IOS 系统打电话事件的监听与状态获取 - CSDN博客 但是我发现这个方法中很多都是被遗弃了提示让使用 CXCallObserver,于是我就试用了下
4.0 百度一番,并未找到OC关于CXCallObserver的用法,不过找了swift大神的一份此类代码。来个传送门以表敬意Swift3.0拨打电话,获取通话状态(接通,挂断...) - CSDN博客,然后我根据swift的代码改写成OC,经测试成功。首先引用头文件、遵守CXCallObserverDelegate协议,并声明变量
#import <CallKit/CallKit.h>
@property(nonatomic,strong)CXCallObserver *callObserver;
然后就是实例化变量
self.callObserver = [[CXCallObserver alloc] init];
[self.callObserver setDelegate:self queue:dispatch_get_main_queue()];
最后实现代理方法
-(void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call{
if (call.isOutgoing) {
DLog(@"电话播出");
if (call.hasConnected) {
DLog(@"电话接通");
}else if (call.hasEnded){
DLog(@"电话挂断");
}else if (call.isOnHold){
DLog(@"无人接听挂断"); }
}else{
DLog(@"other error");
}
}
到此结束,如有疑问或者文章有错误,欢迎指正
网友评论