利用callKit实现电话防骚扰
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实现电话防骚扰相关推荐
- iOS 13新增防骚扰功能,但开启后用户吐槽声一片
不知道已经用上iOS 13的用户们,有没有发现新系统中已经加入了电话防骚扰功能? 据国外媒体报道,按照苹果最新的讲述来看,苹果在iOS 13系统中加入了新的功能,而这个功能颇为实用,可以帮助用户对抗骚 ...
- “以毒攻毒”?阿里将上线“二哈”防骚扰电话应用程序
周五的在315晚会上,"机器人拨打骚扰电话"的黑色产业链被曝光,这正是无数人深受其害的痛点. 有消息称,阿里系部分产品将上线智能防骚扰电话应用程序,核心目的是让AI帮用户接听骚扰电 ...
- 移动/联通/电信官方防骚扰电话屏蔽功能业务开通
前言 Mark每年总有那么几次不愉快的骚扰轰炸电话,经常在网上注册账号或网购难免遇到一言不合就手机轰炸的人,然而又不知道它在什么时候什么地方被泄露过,以致于每天都会收到大量的垃圾广告/诈骗/骚扰电话, ...
- 三大运营商官方防骚扰电话屏蔽教程
其实手机虽然都有防骚扰软件的安装,但是有时候并不适用,今天要说的的是三大营运商的云端拦截,最重要的是免费,如果你一直受尽了这些垃圾推销电话的烦扰,那么快试试今天的方法教程吧. 中国移动 - 中国移动高 ...
- 支持防骚扰的iOS 10来了,网络电话成受益者
今天,苹果正式推送iOS 10.作为第十代iOS,这次更新让人眼花缭乱:更强大的通知栏.更智能的Siri.更好玩的iMessage.更聪明的照片应用.作为第十代iOS,iOS 10前所未有的开放,部分 ...
- 免费开通 | 中国移动/联通/电信防骚扰服务
[推荐]2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.中国移动:绿盾防护(高频骚扰电话呼叫拦截服务) 该功能仅限4G用户,并且需要事先开通VoLTE业务才能使用 ...
- 防骚扰诈骗的重要技术是依靠大数据?
10月8日探讨了内蒙古"诈骗电话预警系统",系统基于中国移动的"提醒彩印"业务,目前全国共有11个省份的试点地区实现了这项业务的全量开通.另外,中国联通也有&q ...
- 有云说 | iPhone7防骚扰 开放云有话说
今年iphone7是苹果的重头戏,苹果两年一大改,关于iPhone7的各种意淫曝光层出不穷,虽然大多是YY之作,但不乏可圈可点之处,尽管如此,苹果7的安全问题也成为人们热议的话题. 随着iOS10系统 ...
- 三网用户免费开通电话防骚扰
移动用户:公众号"中国移动高频骚扰电话防护"点击菜单栏"业务设置"开启. 电信用户:公众号"天翼防骚扰"点击菜单栏"业务设置&qu ...
最新文章
- cocos2d-js 自定义事件监听派发
- 公示 | 首届中国智能心电大赛初赛结果
- 汽车成黑客攻击新目标
- 统计数据背后的指数分布模型
- 艾伟:正则表达式30分钟入门教程
- SSL应用系列之二:为Web站点实现SSL加密访问
- jquery toggle方法使用出错?请看这里-遁地龙卷风
- oracle 子表数据变化时主表也会更新_亿信ABI版本重大更新,新增60余个实用新功能,还有一项黑科技...
- java float转换成long_在Java中如何将float转换为long或int数据类型?
- Hystrix能解决的问题
- STL中的multimap---顺便说说如何查找同一关键字对应的所有值
- 深度学习进阶NLP:word2vec的高速化
- RSA加解密VS加签与验签
- 航空系统c语言课程设计报告,c语言课程设计报告_航空订票系统西安郵電學院.doc...
- 电路布线问题(迷宫问题)
- MSP430 MSP430F5529 LaunchPad实验板
- IBM智慧存储厦门巡展发布Storwize RAS方案
- windows11系统下vone客户端连接服务器失败,请确认网络连接是否正常解决方案
- 二十多个免费高清图片素材网站送给你
- Centos8安装报错Error setting up base repository
热门文章
- 贴纸UI效果如何制作,4个做贴纸效果的小技巧
- Android 12 适配攻略
- git+vimdiff 一次关闭所有文件
- 人生第一篇博客,欢迎大佬莅临指导!
- 【小李木耳】2013年1月31日:北京!北京!空气污染,我倒是赚钱了,自己都无奈。
- [arch Linux IDEA] 搭配MariaDB的JDBC
- Java毕业设计-流浪动物救助系统
- len计算机语言,python中len的使用方法
- word恢复到安装时的状态?
- kafka 创建 topic 报错 Error: Exception thrown by the agent : java.rmi.server.ExportException: Port alrea