2011-06-15 46 views
1

我試圖用此代碼獲取來電號碼(對於越獄設備): extern CFTypeRef CTCallCopyName(void *,CTCall * call); NSLog(@「%@」,CTCallCopyName(NULL,(CTCall *)call));iOS來電顯示檢索

我收到錯誤: 「CTCallCopyName(void *的,CTCall *)」,從引用: LD:符號(S)沒有發現架構的ARMv6

我有核心電話與我聯繫的項目。 也許我的原型是錯的......我不知道。有任何想法嗎? 的Xcode 3,4 SDK

回答

0

如果你調用一個.mm文件這個API,您必須聲明它喜歡的extern 「C」無效美孚(無效);據我所知,在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); 
} 

BTW,我不能讓CTCallCopyName在跳板上工作的iOS 5,還沒有計算出來或試穿其他系統呢。希望這些信息有幫助!

編輯:只需再次嘗試在iOS 5上,CTCallGetID是正確的函數來獲取調用方ID在地址簿中,其原型是ABRecordID CTCallGetID(CTCallRef)。 iOS 6和7可能是相同的。

+0

我也有'CTCallCopyAddress'工作,但'CTCallCopyName'返回零...我在iOS8非越獄,你有沒有更好的運氣呢? – 2015-03-18 15:18:53