callKit框架是ios10之后更新的一个框架,代替了原来的CoreTelephony.framework,使用CallKit可以实现电话的拦截

首先创建一个项目之后,创建一个target,选择Call Directory Extension,会创建一个extension

限制通话的三个方法已经实现但是需要修改,还要在主程序里面添加检测授权的方法和更新电话的代码

一、主程序的代码

检测是否授权,如果想要拦截某个电话,需要在设置界面,设置->电话->来电阻止与身份识别内打开授权,如果用户没有授权需要检测是否授权,可以每隔一段时间检测一下,如果没有授权就提醒一下。

注意ExtensionWithIdentifier这个参数是extension的bundle Identifier
-(void)checkPermissions
{CXCallDirectoryManager *manager = [CXCallDirectoryManager sharedInstance];// 获取权限状态[manager getEnabledStatusForExtensionWithIdentifier:@"XXXXXX" completionHandler:^(CXCallDirectoryEnabledStatus enabledStatus, NSError * _Nullable error) {if (!error) {NSString *title = nil;if (enabledStatus == CXCallDirectoryEnabledStatusDisabled ) {title = @"未授权,请在设置->电话->来电阻止与身份识别内授权相关权限";}}}];
}

给主程序添加代码,array是一个数组,里面存放着电话号码,利用NSUserDefaults把数组存放在app group,group的标识要和这里的一致

注意:另外需要注意的是数组必须是升序的,且必须以86开头的注意:创建NSUserDefaults的时候有个参数是initWithSuiteName:这里要和后面的名称一致
 NSUserDefaults * userDefaults = [[NSUserDefaults alloc]initWithSuiteName:@“XXXXXXXX"];NSArray *sortedArray = [self.mPhoneNumberList sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {return [obj1 compare:obj2];}];[userDefaults setObject:sortedArray forKey:@"blackPhoneNum"];[userDefaults synchronize];[self checkPermissions];[self updateData];

更新需要拦截的电话

-(void)updateData
{CXCallDirectoryManager *manager = [CXCallDirectoryManager sharedInstance];[manager reloadExtensionWithIdentifier:@“XXXXXXX" completionHandler:^(NSError * _Nullable error) {    }];}

二.extensiond的代码CallDirectoryHandler.m的方法实现

- (BOOL)addBlockingPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {NSUserDefaults * userDefaults = [[NSUserDefaults alloc]initWithSuiteName:@“XXXXXXXX"];NSArray * array =  [userDefaults objectForKey:@"blackPhoneNum"];[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {NSString * phoneStr  = obj;int64_t phoneInt = [phoneStr integerValue];CXCallDirectoryPhoneNumber  number = phoneInt ;[context addBlockingEntryWithNextSequentialPhoneNumber:number];}];return YES;
}- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {NSUserDefaults * userDefaults = [[NSUserDefaults alloc]initWithSuiteName:@“XXXXXX"];NSArray * array =  [userDefaults objectForKey:@"blackPhoneNum"];[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {NSString * phoneStr  = obj;int64_t phoneInt = [phoneStr integerValue];CXCallDirectoryPhoneNumber  number = phoneInt ;NSString *label = @"黑名单";[context addIdentificationEntryWithNextSequentialPhoneNumber:number label:label];}];return YES;
}

三.extension和程序之间是不能通讯的,需要利用app group来共享内存,

打开app group的方法,注意需要在主项目和extension都打开并选择同一个标识

TARGETS-->AppExtensionDemo-->Capabilities-->App Groups

转载于:https://www.cnblogs.com/liyy2015/p/6729084.html

利用callKit实现电话防骚扰相关推荐

  1. iOS 13新增防骚扰功能,但开启后用户吐槽声一片

    不知道已经用上iOS 13的用户们,有没有发现新系统中已经加入了电话防骚扰功能? 据国外媒体报道,按照苹果最新的讲述来看,苹果在iOS 13系统中加入了新的功能,而这个功能颇为实用,可以帮助用户对抗骚 ...

  2. “以毒攻毒”?阿里将上线“二哈”防骚扰电话应用程序

    周五的在315晚会上,"机器人拨打骚扰电话"的黑色产业链被曝光,这正是无数人深受其害的痛点. 有消息称,阿里系部分产品将上线智能防骚扰电话应用程序,核心目的是让AI帮用户接听骚扰电 ...

  3. 移动/联通/电信官方防骚扰电话屏蔽功能业务开通

    前言 Mark每年总有那么几次不愉快的骚扰轰炸电话,经常在网上注册账号或网购难免遇到一言不合就手机轰炸的人,然而又不知道它在什么时候什么地方被泄露过,以致于每天都会收到大量的垃圾广告/诈骗/骚扰电话, ...

  4. 三大运营商官方防骚扰电话屏蔽教程

    其实手机虽然都有防骚扰软件的安装,但是有时候并不适用,今天要说的的是三大营运商的云端拦截,最重要的是免费,如果你一直受尽了这些垃圾推销电话的烦扰,那么快试试今天的方法教程吧. 中国移动 - 中国移动高 ...

  5. 支持防骚扰的iOS 10来了,网络电话成受益者

    今天,苹果正式推送iOS 10.作为第十代iOS,这次更新让人眼花缭乱:更强大的通知栏.更智能的Siri.更好玩的iMessage.更聪明的照片应用.作为第十代iOS,iOS 10前所未有的开放,部分 ...

  6. 免费开通 | 中国移动/联通/电信防骚扰服务

    [推荐]2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.中国移动:绿盾防护(高频骚扰电话呼叫拦截服务) 该功能仅限4G用户,并且需要事先开通VoLTE业务才能使用 ...

  7. 防骚扰诈骗的重要技术是依靠大数据?

    10月8日探讨了内蒙古"诈骗电话预警系统",系统基于中国移动的"提醒彩印"业务,目前全国共有11个省份的试点地区实现了这项业务的全量开通.另外,中国联通也有&q ...

  8. 有云说 | iPhone7防骚扰 开放云有话说

    今年iphone7是苹果的重头戏,苹果两年一大改,关于iPhone7的各种意淫曝光层出不穷,虽然大多是YY之作,但不乏可圈可点之处,尽管如此,苹果7的安全问题也成为人们热议的话题. 随着iOS10系统 ...

  9. 三网用户免费开通电话防骚扰

    移动用户:公众号"中国移动高频骚扰电话防护"点击菜单栏"业务设置"开启. 电信用户:公众号"天翼防骚扰"点击菜单栏"业务设置&qu ...

最新文章

  1. cocos2d-js 自定义事件监听派发
  2. 公示 | 首届中国智能心电大赛初赛结果
  3. 汽车成黑客攻击新目标
  4. 统计数据背后的指数分布模型
  5. 艾伟:正则表达式30分钟入门教程
  6. SSL应用系列之二:为Web站点实现SSL加密访问
  7. jquery toggle方法使用出错?请看这里-遁地龙卷风
  8. oracle 子表数据变化时主表也会更新_亿信ABI版本重大更新,新增60余个实用新功能,还有一项黑科技...
  9. java float转换成long_在Java中如何将float转换为long或int数据类型?
  10. Hystrix能解决的问题
  11. STL中的multimap---顺便说说如何查找同一关键字对应的所有值
  12. 深度学习进阶NLP:word2vec的高速化
  13. RSA加解密VS加签与验签
  14. 航空系统c语言课程设计报告,c语言课程设计报告_航空订票系统西安郵電學院.doc...
  15. 电路布线问题(迷宫问题)
  16. MSP430 MSP430F5529 LaunchPad实验板
  17. IBM智慧存储厦门巡展发布Storwize RAS方案
  18. windows11系统下vone客户端连接服务器失败,请确认网络连接是否正常解决方案
  19. 二十多个免费高清图片素材网站送给你
  20. Centos8安装报错Error setting up base repository

热门文章

  1. 贴纸UI效果如何制作,4个做贴纸效果的小技巧
  2. Android 12 适配攻略
  3. git+vimdiff 一次关闭所有文件
  4. 人生第一篇博客,欢迎大佬莅临指导!
  5. 【小李木耳】2013年1月31日:北京!北京!空气污染,我倒是赚钱了,自己都无奈。
  6. [arch Linux IDEA] 搭配MariaDB的JDBC
  7. Java毕业设计-流浪动物救助系统
  8. len计算机语言,python中len的使用方法
  9. word恢复到安装时的状态?
  10. kafka 创建 topic 报错 Error: Exception thrown by the agent : java.rmi.server.ExportException: Port alrea