gpt4 book ai didi

iphone - iOS 5 - CTCallCenter 不适合我

转载 作者:行者123 更新时间:2023-12-01 18:00:06 28 4
gpt4 key购买 nike

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

我正在尝试做的事情:
检测来电或正在调用电话时...

好的,这是我放在 AppDelegate 中的代码在 didEnterBackground 下, 也试过 didResignActive - 我没有得到任何错误,但我也没有得到任何结果..

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。来自 iOS documentation for CTCallCenter :

If your application is active when a call event takes place, the system dispatches the event to your handler immediately. However, call events can also take place while your application is suspended. While it is suspended, your application does not receive call events.



既然你越狱了,何不把你的“app”设为 启动守护进程 ?然后,它可以一直作为服务运行。如果您这样做,那么以下代码应该会收到您的通知(我在越狱的 iOS 5.0.1 iPhone 4 上对此进行了测试):
@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);
}];
}

这是 good tutorial on how to create Launch Daemons ,如果你以前没有这样做过。

如果您的应用程序还具有图形组件,那么您可以构建两个部分:始终运行的启动守护程序,以及在用户启动它时运行的 UI 应用程序。如果需要,他们可以通过通知相互通信。

关于iphone - iOS 5 - CTCallCenter 不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215482/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com