iOS来电显示检索



我正试图用以下代码获取调用方号码(针对越狱设备):extern CFTypeRef CTCallCopyName(void*,CTCall*调用);

NSLog(@"%@",CTCallCopyName(NULL,(CTCall*)调用);

我收到错误:"CTCallCopyName(void*,CTCall*)",引用自:ld:找不到体系结构armv6 的符号

我已将核心电话与我的项目联系起来。也许我的原型错了。。。我不知道。有什么想法吗?Xcode 3,sdk 4

如果在.mm文件中调用此API,则必须像extern一样声明它"C"void foo(void);据我所知,在iOS 5~7上,你应该使用CTCallCopyAddress,原型是:

extern "C" CFStringRef CTCallCopyAddress(CFAllocatorRef, CTCallRef);

请注意,第二个arg是CTCallRef而不是CTCall,这意味着您不能向它发送CTCall类方法(尽管其中一些方法有效)。除了链接CoreTelephony.framework,您还可以动态加载此符号,如下所示:

static CFStringRef (*CTCallCopyAddress)(CFAllocatorRef, CTCallRef);
void Foo(CTCallRef call)
{
    void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony", RTLD_LAZY);
    CTCallCopyAddress = (CFStringRef (*)(CFAllocatorRef, CTCallRef))dlsym(libHandle, "CTCallCopyAddress");
    NSString *address = (NSString *)CTCallCopyAddress(kCFAllocatorDefault, call);
    NSLog(@"The caller's address is %@", address);
    [address release];
    dlclose(libHandle);
}

顺便说一句,我无法让CTCallCopyName在iOS 5上的SpringBoard中工作,我还没有弄清楚它,也没有在其他系统上尝试过。希望这些信息能有所帮助!

编辑:只需在iOS 5上再尝试一次,CTCallGetID是在地址簿中获取呼叫者ID的正确函数,其原型是ABRecordID CTCallGetID(CTCallRef)。iOS 6和7可能是相同的。

最新更新