gpt4 book ai didi

ios - 拦截电话 - iPhone(挂接 CoreTelephony 的正确方法)

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:52 24 4
gpt4 key购买 nike

我是越狱调整开发领域的新手。我正在尝试找出“ Hook ”的适当方法,以便我可以拦截传入调用(然后运行一些代码)。

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

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

但都没有用。我所说的工作是指当 iPhone 接到电话时接到电话。

关于适当的 Hook 方法有什么建议吗?谢谢:)

注意:这将是一个使用私有(private) API 的越狱调整,因此它不会被提交到 App Store。

最佳答案

我没有测试您的代码,但我认为您的问题可能是您需要使用 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");
}
}
}

我提供另一种技术 in this similar question here .另外,请注意我在那个问题中关于未在已放入后台的 UIApplication 中获取通知的评论。

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

关于ios - 拦截电话 - iPhone(挂接 CoreTelephony 的正确方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14758413/

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