如何在iOS应用中使用私有API来拦截来电?

15

我希望能够在我正在编写的iOS应用中有选择性地阻止来电。这是为个人使用而打算的,不是用于App Store,因此我可以使用私有API来实现这一点。

我最近发现了核心电话框架(Core Telephony framework)。有没有办法使用该框架来阻止来电?如果没有,我可以使用哪些私有API来完成此操作?

3个回答

36

你确定它不行吗?这里有代码示例展示如何实现此类功能。SDK中的核心电信头文件不完整,这意味着没有应用商店。下面是我根据链接示例编写的代码片段:

if ([str1 isEqualToString:@"kCTCallIdentificationChangeNotification"])
{
    NSDictionary *info = (__bridge NSDictionary *)userInfo;
    CTCall2 *call = (__bridge CTCall *)[info objectForKey:@"kCTCall"];
    NSString *caller = CTCallCopyAddress(NULL, call);
    NSLog(@"Caller %@",caller);
    if ([caller isEqualToString:@"+1555665753"])
    {
       //disconnect this call
       CTCallDisconnect(call);

}

需要额外的定义:

typedef struct __CTCall CTCall;
extern NSString *CTCallCopyAddress(void*, CTCall *);
extern void CTCallDisconnect(CTCall*);

你需要监控电话中心的回拨(请参见链接示例)。 我在我的iOS5设备上测试了这个片段。


我知道我不能将它放在应用商店上,但是我如何使用该链接屏蔽特定号码? - SimplyKiwi
严格来说,你不能这样做 - 苹果有规定。但是看一下https://dev59.com/XG445IYBdhLWcg3w499e和http://stackoverflow.com/questions/7610182/is-it-legal-to-create-a-recursive-background-handler-in-iphoneprocessing-when可以给你一些想法。我遇到的一个问题是 - 最好保持CoreLocation处于活动状态,而不是在SignificantLocationMonitoring模式下(即使精度为3公里),否则你可能会被过快地终止。当然,你必须考虑电池使用问题(毕竟你使用了CoreLocation)等。 - Tauri
如果它没有做到,我想知道这个360安全卫士应用程序是如何做到的?大家检查一下。 - Asadullah Ali
请提供360应用程序的iTunes链接。 - Tauri
有没有人有代码源示例的URL,因为网站http://tech.ruimaninfo.com/?p=83没有响应。我想能够确定输入号码。 - Gruntcakes
显示剩余4条评论

3

Core Telephony不支持此功能。据我所知,目前也没有任何已知的私有API可以实现此操作。


4
那么iBlackList和MCaller是如何做到的呢? - SimplyKiwi
1
@H2CO3,我在哪里说“这是不可能的”了? - Greg Martin
5
据我所知,目前没有任何已知的私有API能够完成这个任务。 - user529758
2
@H2CO3,我不相信这两个语句是相等的。我也想知道为什么在一个已经有被接受答案的1.5年老问题上这很重要。 - Greg Martin

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接