iOS 5 – CTCallCenter不为我工作

我的手机:iOS 5.1.1使用Absynth2越狱

我正在尝试做什么: 检测来电或拨打电话的时间…

好吧,这里是我的代码,我放在AppDelegatedidEnterBackground ,也didEnterBackground尝试 – 我没有得到任何错误,但我也没有得到任何结果..

 callCenter = [[CTCallCenter alloc] init]; [callCenter setCallEventHandler:^(CTCall *call) { NSDictionary *dict = [NSDictionary dictionaryWithObject:call.callState forKey:@"callState"]; [[NSNotificationCenter defaultCenter] postNotificationName:@"CTCallStateDidChange" object:nil userInfo:dict]; NSLog(@"state changed on call: %@", call); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callReceived:) name:CTCallStateIncoming object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callEnded:) name:CTCallStateDisconnected object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callConnected:) name:CTCallStateConnected object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callDial:) name:CTCallStateDialing object:nil]; 

任何帮助表示赞赏。 谢谢!

问题是,iOS显然不会在后台向UIApplications传递通知。 从CTCallCenter的iOS文档 :

如果您的应用程序在呼叫事件发生时处于活动状态,系统会立即将事件分派给您的处理程序。 但是,通话事件也可能在您的应用程序被暂停时发生。 它被暂停时,您的应用程序不会收到通话事件。

既然你越狱,为什么不让你的“应用程序”成为一个启动守护进程呢? 然后,它可以作为服务一直运行。 如果你这样做,那么下面的代码应该得到你的通知(我在越狱iOS 5.0.1 iPhone 4上testing):

 @property (nonatomic, strong) CTCallCenter* callCenter; 

并通过以下方式注册通知:

 - (void) registerForCalls { self.callCenter = [[CTCallCenter alloc] init]; NSLog(@"registering for call center events"); [callCenter setCallEventHandler: ^(CTCall* call) { if ([call.callState isEqualToString: CTCallStateConnected]) { } else if ([call.callState isEqualToString: CTCallStateDialing]) { } else if ([call.callState isEqualToString: CTCallStateDisconnected]) { } else if ([call.callState isEqualToString: CTCallStateIncoming]) { } NSLog(@"\n\n callEventHandler: %@ \n\n", call.callState); }]; } 

这里有一个关于如何创build启动守护进程的很好的教程 ,如果你以前没有做过。

如果您的应用程序还具有graphics组件,则可以构build两个部分:始终运行的启动守护程序以及在用户启动时运行的UI应用程序。 如果需要的话,他们可以通知对方。

如果你想让你的应用程序始终在后台运行,那么你必须让你的应用程序的VoIP应用程序。 你也可以做一些小技巧,让你的应用程序在背景中播放无限的无声音乐。