標籤:就是 context col amp 排列 這一 因此 director 注意
IOS10的電話攔截理念與android不一樣,基於隱私保護的理念IOS沒把對方號碼送給應用,因此需要反過來由app把需要識別或攔截的電話存入系統資料庫。這一功能通過Call Directory Extension模組實現(具體操作請見54944057,或者https://www.jianshu.com/p/e3d0acda8dda),通過在Blocking和Indentification兩個相關的方法中進行黑名單產生及識別號碼的產生。使用者在設定->電話->來電阻止與身份識別介面下開啟應用的該項功能時,應用的這兩個方法會被系統調用。通過在addAllBlockingPhoneNumbersToContext函數裡實現了某些固話號碼段的屏蔽。這樣實現的屏蔽號碼,在設定介面下是看不到。
需要注意的問題:
1、電話號碼要加國別、區號、升序排列,xcode預設產生的程式碼有問題,正確號碼格式應該如:+8618907311234、+8673122126000。可參見: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、檢查使用者授權。參見:52913028、52768699?locationNum=1
2、即時添加黑名單號碼,而不是需要在設定中單次觸發黑名單設定。
3、即時監聽來電。如:https://www.2cto.com/kf/201607/525336.html、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)。如:78184598、https://www.jianshu.com/p/7f8472a97aa6
IOS-電話攔截