3

我是越狱调整开发场景的新手。我正在尝试找出适当的“挂钩”方法,以便我可以拦截来电(然后运行一些代码)。

我已经转储了 CoreTelephony 框架的头文件,但是似乎没有明显的方法可以挂钩。我试过了:

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

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

关于适当的钩子方法的任何指针?谢谢 :)

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

4

2 回答 2

2

我没有测试您的代码,但我认为您的问题可能是您需要使用 Core Telephony 通知中心来注册该事件(不是您评论中代码中的内容)。像这样的东西:

// 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已放入后台的通知中的评论。

更新:请参阅下面关于kCTCallStatus在 iOS 6 上使用而不是kCTCall.

于 2013-02-08T03:51:50.530 回答
0

是否可以?

是的。

一个没有计算机工程背景或不了解手机信号塔工作原理的普通普通人会具备这样的能力吗?

不。

从技术上讲,您可以购买看起来不便宜的路由器来执行此操作,这是非法的,并且手机公司实际上可以追踪它们,因为它会干扰网络。所以除了政府机构或国际间谍,我认为你没有什么可担心的。但是,如果政府正是你所担心的,我很遗憾地告诉你,他们所做的比仅仅拦截电话还要多

于 2021-12-30T09:34:38.553 回答