【问题标题】:iOS Caller ID RetrieveiOS 来电显示检索
【发布时间】:2011-06-15 23:41:14
【问题描述】:

我正在尝试使用以下代码获取来电号码(用于越狱设备): extern CFTypeRef CTCallCopyName(void*, CTCall* call);

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

我收到错误: “CTCallCopyName(void*, CTCall*)”,引用自: ld: 未找到架构 armv6 的符号

我将 Core Telephony 与我的项目相关联。 也许我的原型是错误的……我不知道。有任何想法吗? Xcode 3,SDK 4

【问题讨论】:

    标签: iphone objective-c function jailbreak


    【解决方案1】:

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

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

    请注意,第二个参数是 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 可能是一样的。

    【讨论】:

    • 我也得到了CTCallCopyAddress 的工作,但CTCallCopyName 返回nil...我在iOS8 上未越狱,你有更好的运气吗?
    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多