拦截电话 - iPhone(正确的方法在CoreTelephony钩)(Intercepting

2019-07-19 13:55发布

我是新来越狱的调整发展景象。 我试图找出适当的方法为“钩”,所以我可以拦截呼入(然后运行一些代码)。

然而,没有方法似乎是显而易见的勾我有倾倒CoreTelephony框架的头文件。 我试过了:

- (void)broadcastCallStateChangesIfNeededWithFailureLogMessage:(id)arg1;
- (BOOL)setUpServerConnection;

但也有工作。 通过工作,我的意思是 - 拿到iPhone收到呼叫时调用。

任何指针,以适当的方法钩? 谢谢 :)

注意:这将是使用私有的API,所以它不会被提交到App Store越狱的调整。

Answer 1:

我没有测试你的代码,但我认为你的问题可能是你需要使用的核心电话通知中心,该事件(你在代码中有您的评论不算什么)注册。 事情是这样的:

// register for all Core Telephony notifications
id ct = CTTelephonyCenterGetDefault();
CTTelephonyCenterAddObserver(ct,   // center
                             NULL, // observer
                             telephonyEventCallback,  // callback
                             NULL,                    // event name (or all)
                             NULL,                    // object
                             CFNotificationSuspensionBehaviorDeliverImmediately);

和你的回调函数

static void telephonyEventCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
    NSString *notifyname = (NSString*)name;
    if ([notifyname isEqualToString:@"kCTCallIdentificationChangeNotification"])
    {
        NSDictionary* info = (NSDictionary*)userInfo;
        CTCall* call = (CTCall*)[info objectForKey:@"kCTCall"];
        NSString* caller = CTCallCopyAddress(NULL, call);

        if (call.callState == CTCallStateDisconnected)
        {
            NSLog(@"Call has been disconnected");
        }
        else if (call.callState == CTCallStateConnected)
        {
            NSLog(@"Call has just been connected");
        }
        else if (call.callState == CTCallStateIncoming)
        {
            NSLog(@"Call is incoming");
        }
        else if (call.callState == CTCallStateDialing)
        {
            NSLog(@"Call is Dialing");
        }
        else
        {
            NSLog(@"None of the conditions");
        }
    }
}

我提供了另一种技术, 在这里这个类似的问题 。 此外,请注意我在大约没有得到一个通知这个问题意见UIApplication已投入的背景。

更新日期:见下文cud_programmer的评论有关使用kCTCallStatus在iOS 6,而不是kCTCall



文章来源: Intercepting phone call - iPhone (correct method to hook in CoreTelephony)