#pragma mark - --- 1.init 生命周期 ---
#pragma mark - --- 2.delegate 视图委托 ---
//开始请求的方法,在打开设置-电话-来电阻止与身份识别开关时,系统自动调用
- (void)beginRequestWithExtensionContext:(CXCallDirectoryExtensionContext *)context {
context.delegate = self;
if (![self addBlockingPhoneNumbersToContext:context]) {
NSError *error = [NSError errorWithDomain:@"CallDirectoryHandler" code:1 userInfo:nil];
[context cancelRequestWithError:error];
return;
}
if (![self addIdentificationPhoneNumbersToContext:context]) {
NSError *error = [NSError errorWithDomain:@"CallDirectoryHandler" code:2 userInfo:nil];
[context cancelRequestWithError:error];
return;
}
[context completeRequestWithCompletionHandler:nil];
}
//添加黑名单:根据生产的模板,只需要修改CXCallDirectoryPhoneNumber数组,数组内号码要按升序排列
- (BOOL)addBlockingPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
CXCallDirectoryPhoneNumber phoneNumbers[] = { 11111111111, 11111111112 };
NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));
for (NSUInteger index = 0; index < count; index += 1) {
CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[index];
[context addBlockingEntryWithNextSequentialPhoneNumber:phoneNumber];
}
return YES;
}
// 添加信息标识:需要修改CXCallDirectoryPhoneNumber数组和对应的标识数组;CXCallDirectoryPhoneNumber数组存放的号码和标识数组存放的标识要一一对应,CXCallDirectoryPhoneNumber数组内的号码要按升序排列
- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
NSMutableDictionary *nameDic = [NSMutableDictionary dictionary];
//获取通讯录数据字典
NSString *txlPlistPath = [self readPathIdentification];
NSArray *txlArr = [NSArray arrayWithContentsOfFile:txlPlistPath];
NSDictionary *txlName = [txlArr firstObject];
//获取客户数据字典
NSString *kePlistPath = [self readKeHuPlistPath];
NSArray *khArr = [NSArray arrayWithContentsOfFile:kePlistPath];
NSDictionary *khName = [khArr firstObject];
//获取联系人数据字典
NSString *lxrPlistPath = [self readLXRPlistPath];
NSArray *lxrArr = [NSArray arrayWithContentsOfFile:lxrPlistPath];
NSDictionary *lxrName = [lxrArr firstObject];
if (txlArr.count) {
[nameDic setValuesForKeysWithDictionary:txlName];
}
if (khArr.count) {
[nameDic setValuesForKeysWithDictionary:khName];
}
if (lxrArr.count) {
[nameDic setValuesForKeysWithDictionary:lxrName];
}
NSArray<NSDictionary *> * array = [self readData];
for (NSString *str in array) {
NSString *phone = str;
NSString *name = [nameDic valueForKey:phone];
if (phone == nil || name == nil) {
break;
}else {
phone = [self fixPhone:phone];
}
CXCallDirectoryPhoneNumber phoneNumber = [phone longLongValue];
[context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:name];
}
return YES;
}
#pragma mark - CXCallDirectoryExtensionContextDelegate
- (void)requestFailedForExtensionContext:(CXCallDirectoryExtensionContext *)extensionContext withError:(NSError *)error {
}
#pragma mark - --- 3.event response 事件相应 ---
#pragma mark - --- 4.private methods 私有方法 ---
-(NSArray<NSDictionary *> *)readData
{
NSArray *dataArr = [NSArray array];
NSMutableDictionary *dataDic = [NSMutableDictionary dictionary];
//通讯录Arr
NSString *filePathIdentification = [self readPathIdentification];
NSArray *arr = [NSArray arrayWithContentsOfFile:filePathIdentification];
NSDictionary *dic = [arr firstObject];
NSArray *txlArr = [dic allKeys];
//客户Arr
NSString *khPlistPath = [self readKeHuPlistPath];
NSArray *khArr = [NSArray arrayWithContentsOfFile:khPlistPath];
NSDictionary *khDic = [khArr firstObject];
NSArray *kuData = [khDic allKeys];
//联系人Arr
NSString *lxrPlistPath = [self readLXRPlistPath];
NSArray *lxrArr = [NSArray arrayWithContentsOfFile:lxrPlistPath];
NSDictionary *lxrDic = [lxrArr firstObject];
NSArray *lxrData = [lxrDic allKeys];
if (txlArr.count) {
// [dataArr addObjectsFromArray:txlArr];
[dataDic setValuesForKeysWithDictionary:dic];
}
if (kuData.count) {
[dataDic setValuesForKeysWithDictionary:khDic];
}
if (lxrData.count) {
[dataDic setValuesForKeysWithDictionary:lxrDic];
}
dataArr = [dataDic allKeys];
return [self arraySort:dataArr ASC:YES];
}
//获取通讯录Plist路径
- (NSString *)readPathIdentification{
NSURL *fileUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@""];
NSString *filePath = [fileUrl.absoluteString substringFromIndex:(@"file://".length)];
NSString *filePathIdentification = [filePath stringByAppendingString:@""];
return filePathIdentification;
}
//获取客户Plist路径
-(NSString *)readKeHuPlistPath{
NSURL *fileUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@""];
NSString *filePath = [fileUrl.absoluteString substringFromIndex:(@"file://".length)];
NSString *filePathIdentification = [filePath stringByAppendingString:@""];
return filePathIdentification;
}
//获取客户Plist路径
-(NSString *)readLXRPlistPath{
NSURL *fileUrl = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@""];
NSString *filePath = [fileUrl.absoluteString substringFromIndex:(@"file://".length)];
NSString *filePathIdentification = [filePath stringByAppendingString:@""];
return filePathIdentification;
}
- (NSArray<NSDictionary *> *)arraySort:(NSArray<NSDictionary *> *)array ASC:(BOOL)ASC
{
if (array == nil || [array count] == 0) {
return nil;
}
return [array sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
if(ASC){
if([obj1 integerValue] > [obj2 integerValue]) {
return(NSComparisonResult)NSOrderedDescending;
}
if([obj1 integerValue] < [obj2 integerValue]) {
return(NSComparisonResult)NSOrderedAscending;
}
}else{
if([obj1 integerValue] < [obj2 integerValue]) {
return(NSComparisonResult)NSOrderedDescending;
}
if([obj1 integerValue] > [obj2 integerValue]) {
return(NSComparisonResult)NSOrderedAscending;
}
}
return(NSComparisonResult)NSOrderedSame;
}];
}
- (NSString *)fixPhone:(NSString *)phone{
NSString *stringPhone = [phone stringByReplacingOccurrencesOfString:@"+" withString:@""];
stringPhone = [stringPhone stringByReplacingOccurrencesOfString:@" " withString:@""];
stringPhone = [stringPhone stringByReplacingOccurrencesOfString:@"-" withString:@""];
stringPhone = [stringPhone stringByReplacingOccurrencesOfString:@"(" withString:@""];
stringPhone = [stringPhone stringByReplacingOccurrencesOfString:@")" withString:@""];
if (stringPhone != nil && stringPhone.length > 0) {
NSInteger phonenumebr = [stringPhone longLongValue];
NSString *stringFinal = [NSString stringWithFormat:@"%@%ld",([stringPhone hasPrefix:@"86"]?@"":@"86"),phonenumebr];
return stringFinal;
}
return stringPhone;
}
5."CallExtension"管理器代码
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 下载安装Visual SVN Server,以下是安装过程中其中一步:SVN服务器安装.png 安装之后软件界面如...
- 由于C# XML的管理类没怎么看明白,自己写了实用。首先是节点UDataElement,是XML数据中的一个节点节...