我是新来越狱的调整发展景象。 我试图找出适当的方法为“钩”,所以我可以拦截呼入(然后运行一些代码)。
然而,没有方法似乎是显而易见的勾我有倾倒CoreTelephony框架的头文件。 我试过了:
- (void)broadcastCallStateChangesIfNeededWithFailureLogMessage:(id)arg1;
- (BOOL)setUpServerConnection;
但也有工作。 通过工作,我的意思是 - 拿到iPhone收到呼叫时调用。
任何指针,以适当的方法钩? 谢谢 :)
注意:这将是使用私有的API,所以它不会被提交到App Store越狱的调整。
我没有测试你的代码,但我认为你的问题可能是你需要使用的核心电话通知中心,该事件(你在代码中有您的评论不算什么)注册。 事情是这样的:
// 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
。