#import <CallKit/CXCallObserver.h>#import <CallKit/CXCall.h>

//拨打电话 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://10086"] options:@{} completionHandler:^(BOOL success) { NSLog(@"%d",success); if return ; //设置电话代理 _callObserver = [[CXCallObserver alloc]init]; [_callObserver setDelegate:self queue:dispatch_get_main_queue()]; }];

-callObserver:(CXCallObserver *)callObserver callChanged: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 :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 */ //接通 if (call.outgoing && call.hasConnected && !call.hasEnded) { //记录当前时间 _beforeDate = [NSDate date]; } //挂断 if (call.outgoing && call.hasConnected && call.hasEnded) { //计算通话时长 NSDate* dat = [NSDate dateWithTimeInterval:0 sinceDate:_beforeDate]; NSTimeInterval a=[dat timeIntervalSinceNow]; NSString *timeString = [NSString stringWithFormat:@"%0.f",fabs];//转为字符型 NSLog(@"%@秒",timeString); }}

在iOS7之后,默认情况下 状态栏是交给控制器管理的
如果想让appDelegate管理,需要在info.plist文件中加入一个选项View
controller-based status bar appearance = NO ,如下图

最近项目中要加入地址选择,还是要四级的包含街道的,网上查到一大堆都是没用的,有的也只是一大堆的JOSN文件放哪里,好尴尬,于是动手整理了一份四级的Plist文件,分享出来供需要的人使用。

防止意外,在控制器销毁时 把 delegate 设为 nil

图片 1

-dealloc{ [_callObserver setDelegate:nil queue:dispatch_get_main_queue()]; _callObserver = nil;}

设置appDelegate 管理状态栏之后,在勾选下图

获取plist文件数据- (NSArray *)rootArray { if (!_rootArray) { NSString *path = [[NSBundle mainBundle] pathForResource:@"area" ofType:@"plist"]; _rootArray = [[NSArray array] initWithContentsOfFile:path]; } return _rootArray;}

如果代理回调没有执行1.查看是否设置代理2.需要把callObserver
全局引用,保证不销毁.3.以上方法为10.0之后 需要判断 版本再10.0之前使用

图片 2

每级的解析如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注