标签:就是 context col amp 排列 这一 因此 director 注意
IOS10的电话拦截理念与android不一样,基于隐私保护的理念IOS没把对方号码送给应用,因此需要反过来由app把需要识别或拦截的电话存入系统数据库。这一功能通过Call Directory Extension模块实现(具体操作请见https://blog.csdn.net/sinat_30336277/article/details/54944057,或者https://www.jianshu.com/p/e3d0acda8dda),通过在Blocking和Indentification两个相关的方法中进行黑名单生成及识别号码的生成。用户在设置->电话->来电阻止与身份识别界面下开启应用的该项功能时,应用的这两个方法会被系统调用。通过在addAllBlockingPhoneNumbersToContext函数里实现了某些固话号码段的屏蔽。这样实现的屏蔽号码,在设置界面下是看不到。
需要注意的问题:
1、电话号码要加国别、区号、升序排列,xcode默认生成的代码有问题,正确号码格式应该如:+8618907311234、+8673122126000。可参见:https://blog.csdn.net/Rex_xing/article/details/78184598
2、系统电话簿优先级高于此方法设置的识别号码,也就是同时有设置的情况下只会显示号码簿里面的姓名。
3、黑名单拦截的来电不会在历史通话中显示。
下面是我的屏蔽多个号码段的代码:
1 CXCallDirectoryPhoneNumber allPhoneNumbers[] = { +8673122126000, +8673122129000, +8673182984000, +8673189520000, +8673189522000, +8673189526000, +8673189527000, +8673189587000 }; 2 NSUInteger count = (sizeof(allPhoneNumbers) / sizeof(CXCallDirectoryPhoneNumber)); 3 for (NSUInteger index = 0; index < count; index += 1) { 4 CXCallDirectoryPhoneNumber phoneNumber = allPhoneNumbers[index]; 5 for(int i=0;i<1000;i += 1){ 6 [context addBlockingEntryWithNextSequentialPhoneNumber:phoneNumber+i]; 7 } 8 }
此外,还有几个功能没尝试:
1、检查用户授权。参见:https://blog.csdn.net/qq_26918391/article/details/52913028、https://blog.csdn.net/qq_30513483/article/details/52768699?locationNum=1
2、实时添加黑名单号码,而不是需要在设置中单次触发黑名单设置。
3、实时监听来电。如:https://www.2cto.com/kf/201607/525336.html、https://blog.csdn.net/gf771115/article/details/46649115、https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=2653578016&idx=2&sn=ae1474cbc3037e5c00e6da5c69cd8569&chksm=84b3b127b3c43831191d37ca0e86d2f2f7b97d180d8c0ccd6dedb9c4a9a9a8c0af909d28d558&scene=4#wechat_redirect
4、与宿主应用间数据共享(Extension与主应用是两个应用,主应用的获取的数据如果需要传递到extension,得用到appgroup)。如:https://blog.csdn.net/Rex_xing/article/details/78184598、https://www.jianshu.com/p/7f8472a97aa6
标签:就是 context col amp 排列 这一 因此 director 注意
原文地址:https://www.cnblogs.com/badwood316/p/8996573.html