拦截电话 – iPhone(在CoreTelephony中挂钩的正确方法)

我是新的越狱调整发展现场。 我试图找出适当的方法来'钩',所以我可以拦截来电(然后运行一些代码)。

我已经抛弃了CoreTelephony框架的头文件,但是没有任何方法看起来很明显。 我努力了:

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

但都没有工作。 我的意思是 – 当iPhone接到电话时被调用。

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

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

我没有testing你的代码,但我认为你的问题可能是你需要使用核心电话通知中心注册该事件(而不是你在评论中的代码中)。 像这样的东西:

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

你的callback函数是

 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已被放到后台。

更新:请参阅下面关于在iOS 6上使用kCTCallStatus而不是kCTCall的cud_programmer的评论。